Maison >développement back-end >Tutoriel Python >Pourquoi Python génère-t-il une UnboundLocalError ?

Pourquoi Python génère-t-il une UnboundLocalError ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-24 13:08:16655parcourir

Why Does Python Raise an 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 :

  • Affectation
  • Paramètres de fonction
  • pour les noms de boucles
  • Gestionnaires d'exceptions
  • Noms des gestionnaires de contexte

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn