Zusammenfassung: Um ein UnboundLocalError
aufzulösen, wenn die lokale Variable nach der ersten Verwendung neu zugewiesen wird, können Sie entweder das Schlüsselwort global
oder das Schlüsselwort nonlocal
verwenden. Mit dem Schlüsselwort global
können Sie die Werte einer globalen Variablen innerhalb des lokalen Bereichs einer Funktion ändern, während das Schlüsselwort nonlocal
ähnliche Funktionen für verschachtelte Funktionen bietet.
Problem: Bei einer lokalen Variablen. Wie löse ich ein UnboundLocalError
auf, wenn die lokale Variable nach der ersten Verwendung neu zugewiesen wird?
Beispiel:
val = 100def func(): val = val + 100 print(val)func()
Ausgang:
Traceback (most recent call last): File "C:/Users/Shubham-PC/PycharmProjects/pythonProject1/main.py", line 9, in <module> func() File "C:/Users/Shubham-PC/PycharmProjects/pythonProject1/main.py", line 5, in func val = val + 100UnboundLocalError: local variable 'val' referenced before assignment
Bevor wir uns mit den Lösungen für unser Problem befassen, müssen wir die Ursache hinter UnboundLocalError
verstehen.
Grundursache für UnboundLocalErrors:
Wenn eine Variable innerhalb einer Funktion zugewiesen wird, wird sie in Python standardmäßig als lokale Variable behandelt. Wenn auf eine lokale Variable verwiesen wird, bevor ihr ein Wert zugewiesen / gebunden wurde, wird ein UnboundLocalError
ausgelöst. Wenn im obigen Beispiel die Variable 'val'
vom Python-Interpreter in der Funktion func()
gelesen wird, wird angenommen, dass 'val'
eine lokale Variable ist. Es wird jedoch bald erkannt, dass auf die lokale Variable verwiesen wurde, bevor ihr innerhalb der Funktion ein Wert zugewiesen wurde. Somit wirft es einen UnboundLocalError
.
Mit anderen Worten, wir können nur innerhalb einer Funktion auf eine globale Variable zugreifen, sie jedoch nicht innerhalb der Funktion ändern (es sei denn, Sie erzwingen eine globale oder nicht lokale Zuweisung mit den Schlüsselwörtern global
oder nonlocal
).
Hinweis: Die übergeordnete Klasse aller Python-Ausnahmen ist BaseException
. Das folgende Diagramm stellt die Ausnahmehierarchie von UnboundLocalError
dar.

Nun, da wir wissen, warum und wann ein UnboundLocalError
ausgelöst wird, werfen wir einen Blick auf die wahrscheinlichen Lösungen, um diesen Fehler zu überwinden.
Inhaltsverzeichnis
Methode 1: Mit dem globalen Schlüsselwort
können wir mit dem Schlüsselwort global
auf eine globale Variable aus dem lokalen Bereich einer Funktion zugreifen und diese ändern. Jede außerhalb einer Funktion erstellte Variable ist standardmäßig global, während jede innerhalb der Funktion erstellte Variable standardmäßig lokal ist. Um eine globale Variable innerhalb der Funktion zu ändern und ein UnboundLocalError
zu vermeiden, können wir das Schlüsselwort global
verwenden.
Schauen wir uns den folgenden Code an, der das obige Konzept vereinfacht:
val = 100print("Value at First Usage: ", val)def func(): global val val = val + 100 print("Output after Modification within func(): ", val)func()
Ausgang:
Value at First Usage: 100Output after Modification within func(): 200
Methode 2: Verwenden des nicht lokalen Schlüsselworts
Das Schlüsselwort nonlocal
wird verwendet, wenn wir eine verschachtelte Funktion haben. In einer solchen Situation ist der lokale Gültigkeitsbereich einer Variablen möglicherweise nicht definiert, dh der Gültigkeitsbereich einer Variablen ist weder lokal noch global.
Schauen wir uns das folgende Beispiel an, um die Verwendung des Schlüsselworts nonlocal
zur Lösung unseres Problems zu verstehen.
def func(): val = 50 print("Output of func:", val) def foo(): nonlocal val val = val + 100 print("Output of foo:", val) foo() print("Output of func() after changes made to foo():", val)func()
Ausgabe
Output of func: 50Output of foo: 150Output of func() after changes made to foo(): 150
Im obigen Programm wird das Schlüsselwort nonlocal
mit der Variablen val
innerhalb der verschachtelten Funktion foo()
verwendet, um eine nicht lokale Variable zu erstellen. Wenn sich der Wert der Variablen nonlocal
ändert, werden die Änderungen auch in der lokalen Variablen wiedergegeben.
Haftungsausschluss: Das Schlüsselwort nonlocal
funktioniert nur in Python 3 und höher.
Methode 3: Verwenden eines veränderlichen Objekts
Da nonlocal
in Python-Versionen vor Python 3 nicht funktioniert, können Sie ein veränderliches Objekt wie ein Python-Wörterbuch verwenden, um die Werte zu speichern, wenn Sie keine globale Variable erstellen möchten.
Schauen wir uns das folgende Programm an, um die Verwendung eines veränderlichen Objekts zu verstehen, um das UnboundLocalError
zu überwinden.
variables = { # creating a mutable object/dictionary 'val': 100}print('Output before Modification of val: ', variables)def func(): variables += 50 print('Output after Modification of val: ', variables)func()
Output before Modification of val: 100Output after Modification of val: 150
Methode 4: Übergeben von Parametern an die Funktion
Dies ist der traditionelle Weg, um unser Problem zu lösen. Anstatt eine globale Variable zu verwenden, können wir Parameter an die definierte Funktion übergeben, um ein UnboundLocalError
zu vermeiden. Schauen wir uns den folgenden Code an, um zu sehen, wie dies gemacht werden kann:
val = 100print("Value of val at first use: ", val)def func(v): v = v + 100 print("Output of val after modification:", v)func(val)
Ausgang:
Value of val at first use: 100Output of val after modification: 200
Globales Keyword vs. nichtlokales Keyword
Bevor wir diesen Artikel abschließen, werfen wir einen Blick auf die Hauptunterschiede zwischen einer global
und nonlocal
Variablen / Keywords.
- Im Gegensatz zum Schlüsselwort
global
funktioniert das Schlüsselwortnonlocal
nur in Python 3 und höher. - Das Schlüsselwort
global
kann mit bereits vorhandenen globalen Variablen oder neuen Variablen verwendet werden, während das Schlüsselwortnonlocal
mit einer bereits vorhandenen Variablen definiert werden muss.
Fazit
Aus der obigen Diskussion haben wir gelernt, dass wir für den Umgang mit UnboundLocalError
in unserem Code eine der folgenden Methoden verwenden können:
- Verwenden Sie das Schlüsselwort
global
. - Verwenden Sie das Schlüsselwort
nonlocal
bei verschachtelten Funktionen. - Verwenden Sie ein veränderliches Objekt.
- Parameter an eine Funktion übergeben.
Ich hoffe, dass Sie diesen Artikel hilfreich fanden und nachdem Sie ihn gelesen haben, können Sie problemlos mit UnboundLocalError
umgehen. Bitte bleiben Sie dran für weitere interessante Artikel.
Wohin von hier aus?
Genug Theorie, lasst uns üben!
Um erfolgreich zu programmieren, müssen Sie echte Probleme für echte Menschen lösen. So können Sie leicht zu einem sechsstelligen Verdiener werden. Und so polieren Sie die Fähigkeiten, die Sie in der Praxis wirklich brauchen. Was nützt schließlich die Lerntheorie, die niemand jemals braucht?
Praxis-Projekte ist, wie Sie Ihre Säge in Codierung schärfen!
Möchten Sie ein Code-Meister werden, indem Sie sich auf praktische Code-Projekte konzentrieren, mit denen Sie tatsächlich Geld verdienen und Probleme für Menschen lösen?
Dann werden Sie Python Freelance Developer! Es ist der beste Weg, sich der Aufgabe zu nähern, Ihre Python-Fähigkeiten zu verbessern – auch wenn Sie ein absoluter Anfänger sind.
Nehmen Sie an meinem kostenlosen Webinar „How to Build Your High-Income Skill Python“ teil und sehen Sie, wie ich mein Codierungsgeschäft online ausgebaut habe und wie Sie es auch können — bequem von zu Hause aus.
Jetzt zum kostenlosen Webinar anmelden!
Schreibe einen Kommentar