Heim >Backend-Entwicklung >Python-Tutorial >Warum löst Python in verschachtelten Funktionen einen „UnboundLocalError' aus und wie kann dieser behoben werden?

Warum löst Python in verschachtelten Funktionen einen „UnboundLocalError' aus und wie kann dieser behoben werden?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-23 08:20:22751Durchsuche

Why Does Python Throw an `UnboundLocalError` in Nested Functions, and How Can It Be Resolved?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn