Maison >développement back-end >Tutoriel Python >Pourquoi Python génère-t-il une UnboundLocalError ?
Noms non liés en Python : comprendre UnboundLocalError
Lorsqu'il rencontre un nom en Python, l'interpréteur vérifie son état de liaison dans la portée actuelle. Si le nom n'est pas lié à une valeur, une erreur est générée. Comprendre le fonctionnement de la liaison de noms est crucial pour éviter de telles erreurs.
La nature des noms locaux non liés
Une UnboundLocalError se produit lorsqu'une variable locale est référencée avant d'avoir été attribuée. une valeur ou avant qu'une opération de liaison (par exemple, affectation, paramètre de fonction) ait eu lieu. Cette situation peut se produire lorsqu'une instruction conditionnelle empêche l'exécution de l'opération de liaison.
Considérez l'extrait de code suivant :
def foo(): if False: spam = 'eggs' print(spam)
Dans cet exemple, la variable spam n'est pas liée au sein du if bloc de l'instruction car la condition est évaluée à False. Lorsque l'interpréteur rencontre l'instruction print, il génère une UnboundLocalError car il ne peut pas localiser une valeur liée pour le spam.
Opérations de liaison
En Python, les opérations de liaison établissent la portée d'un nom. Ces opérations incluent :
Global et local Liaisons
Les noms locaux sont liés dans une portée spécifique, généralement une fonction ou un bloc imbriqué. Les noms globaux, en revanche, sont liés en dehors de toute portée de fonction et sont accessibles à partir de n'importe quel point du programme. Pour déclarer explicitement une variable comme globale, le mot-clé global doit être utilisé dans la portée de la fonction.
Par exemple, considérons l'extrait de code suivant :
foo = None def bar(): foo = 'spam' print(foo)
Ce code génère une UnboundLocalError car foo est lié dans le cadre de la fonction bar. Pour résoudre ce problème, foo doit être déclaré comme variable globale dans la fonction :
foo = None def bar(): global foo foo = 'spam' print(foo)
En résumé
UnboundLocalErrors se produit lorsqu'une variable locale est référencée avant d'être liée à une valeur. Comprendre les opérations de liaison et le concept de noms globaux et locaux est essentiel pour éviter ces erreurs. En gérant correctement les liaisons de noms, les programmeurs Python peuvent garantir que leur code s'exécute sans erreurs liées aux noms non liés.
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!