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.

UnboundLocalError Ausnahmehierarchie

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.

  1. Im Gegensatz zum Schlüsselwort global funktioniert das Schlüsselwort nonlocal nur in Python 3 und höher.
  2. Das Schlüsselwort global kann mit bereits vorhandenen globalen Variablen oder neuen Variablen verwendet werden, während das Schlüsselwort nonlocal 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:

  1. Verwenden Sie das Schlüsselwort global .
  2. Verwenden Sie das Schlüsselwort nonlocal bei verschachtelten Funktionen.
  3. Verwenden Sie ein veränderliches Objekt.
  4. 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!