Maison >développement back-end >Tutoriel Python >Pourquoi est-ce que j'obtiens une UnboundLocalError en Python ?

Pourquoi est-ce que j'obtiens une UnboundLocalError en Python ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-05 22:20:17530parcourir

Why Do I Get an UnboundLocalError in Python?

UnboundLocalError : Comprendre les variables non liées 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!

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