In Python tritt ein UnboundLocalError auf, wenn auf eine lokale Variable verwiesen wird, bevor ihr ein Wert zugewiesen wurde. Im Gegensatz zu anderen Programmiersprachen erfordert Python keine expliziten Variablendeklarationen. Stattdessen sind Variablen bei der Zuweisung an Werte gebunden.
Eine Möglichkeit, einen UnboundLocalError auszulösen, besteht darin, auf eine nicht zugewiesene Variable zuzugreifen:
>>> foobar Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'foobar' is not defined
Eine andere Möglichkeit besteht darin, dass eine Zuweisungsoperation nicht ausgeführt werden kann, z wie innerhalb eines bedingten Blocks:
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
In Python werden Namen durch verschiedene Operationen an Werte gebunden: Zuweisung, Funktionsparameter, Importanweisungen, Ausnahmehandler und Kontextmanager. Wenn ein Name in einen Funktionsbereich gebunden ist, wird er zu einer lokalen Variablen. Um auf eine globale Variable innerhalb einer Funktion zuzugreifen, muss eine globale oder nicht lokale Anweisung verwendet werden (in Python 3).
Zum Beispiel versucht die folgende Funktion, auf eine globale Variable foo zuzugreifen, schlägt jedoch fehl, weil sie innerhalb der Funktion gebunden ist Geltungsbereich:
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
Die Verwendung von global foo behebt jedoch das Problem:
foo = None def bar(): global foo if False: foo = 'spam' print(foo) >>> bar() None
Das Konzept der Variablenbindung ist zu verstehen entscheidend, um UnboundLocalErrors in Python zu vermeiden.
Das obige ist der detaillierte Inhalt vonWarum erhalte ich in Python einen UnboundLocalError?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!