164 votes

Variable locale ( ?) référencée avant l'affectation

test1 = 0
def testFunc():
    test1 += 1
testFunc()

Je reçois l'erreur suivante :

UnboundLocalError : la variable locale 'test1' est référencée avant l'affectation.

L'erreur dit que 'test1' est une variable locale mais je pensais que cette variable était globale

Alors, est-ce global ou local et comment résoudre cette erreur sans passer par le global ? test1 comme argument pour testFunc ?

284voto

Florin Stingaciu Points 7365

Pour que vous puissiez modifier test1 alors qu'à l'intérieur d'une fonction vous devrez définir test1 comme une variable globale, par exemple :

test1 = 0
def testFunc():
    global test1 
    test1 += 1
testFunc()

Cependant, si vous avez seulement besoin de lire la variable globale, vous pouvez l'imprimer sans utiliser le mot-clé global comme ça :

test1 = 0
def testFunc():
     print test1 
testFunc()

Mais chaque fois que vous devez modifier une variable globale, vous devez utiliser le mot-clé global .

64voto

jamylak Points 38094

La meilleure solution : Ne pas utiliser global s

>>> test1 = 0
>>> def test_func(x):
        return x + 1

>>> test1 = test_func(test1)
>>> test1
1

12voto

Stanislav Heller Points 543

Vous devez spécifier que test1 est global :

test1 = 0
def testFunc():
    global test1
    test1 += 1
testFunc()

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X