web-dev-qa-db-fra.com

Variable locale (?) Référencée avant affectation

Duplicate possible:
var local référencé avant l'affectation
Python 3: UnboundLocalError: variable locale référencée avant l'affectation

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

Je reçois l'erreur suivante:

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

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

Donc, est-ce global ou local et comment résoudre cette erreur sans passer global test1 comme argument à testFunc?

100
foxneSs

Pour que vous puissiez modifier test1 tout en étant dans une fonction, vous devez définir test1 comme une variable globale, par exemple:

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

Toutefois, si vous ne devez lire que la variable globale, vous pouvez l’imprimer sans utiliser le mot-clé global, comme suit:

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

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

176
Florin Stingaciu

Meilleure solution: n'utilisez pas globals

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

>>> test1 = test_func(test1)
>>> test1
1
52
jamylak

Vous devez spécifier que test1 est global:

test1 = 0
def testFunc():
    global test1
    test1 += 1
testFunc()
9
Stanislav Heller