Heim >Backend-Entwicklung >Python-Tutorial >Warum löst Python in verschachtelten Funktionen einen „UnboundLocalError' aus und wie kann dieser behoben werden?
UnboundLocalError: Vorzeitige Variablenzuweisung in verschachtelten Blöcken
Beim Arbeiten mit verschachtelten Funktionsbereichen, wie im bereitgestellten Code, kann in Python der Fehler auftreten Meldung „UnboundLocalError: Vor der Zuweisung wurde auf die lokale Variable ‚c‘ verwiesen.“ Dieser Fehler tritt auf, wenn auf eine innerhalb eines verschachtelten Blocks zugewiesene Variable verwiesen wird, bevor sie initialisiert wird.
Im Beispielcode:
a, b, c = (1, 2, 3) def test(): print(a) print(b) c += 1 # UnboundLocalError here
Der Code versucht, die Variablen a, b und zu drucken c innerhalb der Funktion test(). Während a und b globale Variablen sind und direkt aufgerufen werden können, existiert c im lokalen Gültigkeitsbereich der Funktion. Als Ergebnis erstellt die Zuweisung c = 1 eine lokale Variable c, die die globale Variable mit demselben Namen überschreibt.
Wenn der Code ausgeführt wird, initialisiert Python a und b und ruft test() auf. Innerhalb von test() werden a und b erfolgreich gedruckt, es wird jedoch versucht, die lokale Variable c zu drucken, bevor ihr ein Wert zugewiesen wurde, was zu dem Fehler führt.
Um dieses Problem zu beheben, muss die Variable explizit deklariert werden innerhalb der Funktion als global definieren, indem Sie das Schlüsselwort global verwenden, bevor Sie Werte zuweisen. Dies weist Python an, die globale Variable zu verwenden, anstatt eine lokale Variable zu erstellen. Der korrigierte Code wäre:
a, b, c = (1, 2, 3) def test(): global c # Declare 'c' as global print(a) print(b) c += 1
Alternativ kann man in Python 3 das Schlüsselwort nonlocal verwenden, das sich auf den nächstgelegenen umschließenden Funktionsbereich bezieht, der eine Variable mit demselben Namen hat. Dies ermöglicht es, die in einer äußeren Funktion deklarierte nicht-globale Variable zu ändern. Der aktualisierte Code, der nichtlokal verwendet, wäre:
a, b, c = (1, 2, 3) def test(): nonlocal c print(a) print(b) c += 1
Das obige ist der detaillierte Inhalt vonWarum löst Python in verschachtelten Funktionen einen „UnboundLocalError' aus und wie kann dieser behoben werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!