Maison >développement back-end >Tutoriel Python >Pourquoi est-ce que j'obtiens une UnboundLocalError en Python ?
En Python, une UnboundLocalError se produit lorsqu'une variable locale est référencée avant qu'une valeur ne lui soit attribuée. Contrairement à d'autres langages de programmation, Python ne nécessite pas de déclarations de variables explicites. Au lieu de cela, les variables sont liées à des valeurs lorsqu'elles sont attribuées.
Une façon de déclencher une UnboundLocalError consiste à accéder à une variable non attribuée :
>>> foobar Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'foobar' is not defined
Une autre façon est lorsqu'une opération d'affectation ne parvient pas à s'exécuter, par exemple comme dans un bloc conditionnel :
def foo(): if False: spam = 'eggs' print(spam) >>> foo() Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<stdin>", line 4, in foo UnboundLocalError: local variable 'spam' referenced before assignment
En Python, les noms sont liés aux valeurs via diverses opérations : affectation, paramètres de fonction, importation instructions, gestionnaires d'exceptions et gestionnaires de contexte. Lorsqu'un nom est lié à la portée d'une fonction, il devient une variable locale. Pour accéder à une variable globale dans une fonction, une instruction globale ou non locale doit être utilisée (en Python 3).
Par exemple, la fonction suivante tente d'accéder à une variable globale foo mais échoue car elle est liée à la fonction scope :
foo = None def bar(): if False: foo = 'spam' print(foo) >>> bar() Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<stdin>", line 4, in bar UnboundLocalError: local variable 'foo' referenced before assignment
Cependant, l'utilisation de global foo résout le problème :
foo = None def bar(): global foo if False: foo = 'spam' print(foo) >>> bar() None
Comprendre le concept de liaison de variable est crucial pour éviter UnboundLocalErrors en Python.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!