Heim >Backend-Entwicklung >Python-Tutorial >Wie werden ungebundene lokale Variablenfehler in verschachtelten Funktionsbereichen behandelt?

Wie werden ungebundene lokale Variablenfehler in verschachtelten Funktionsbereichen behandelt?

DDD
DDDOriginal
2024-10-21 18:42:29700Durchsuche

How to Handle Unbound Local Variable Errors in Nested Function Scopes?

UnboundLocalError in verschachtelten Funktionsbereichen auflösen

Der Python-Interpreter stößt auf einen UnboundLocalError, wenn er auf eine ungebundene lokale Variable innerhalb einer verschachtelten Funktion zugreift. Dieses Problem tritt auf, wenn eine verschachtelte Funktion versucht, eine in der äußeren Funktion deklarierte Variable zu ändern.

Beispiel:

Bedenken Sie den folgenden Code:

<code class="python">def outer():
    ctr = 0

    def inner():
        ctr += 1

    inner()</code>

Beim Ausführen dieses Codes generiert der Interpreter den folgenden Fehler:

Traceback (most recent call last):
  File "foo.py", line 9, in <module>
    outer()
  File "foo.py", line 7, in outer
    inner()
  File "foo.py", line 5, in inner
    ctr += 1
UnboundLocalError: local variable 'ctr' referenced before assignment

Ursache:

Obwohl verschachtelte Bereiche vorhanden sind, kann die innere Funktion nicht auf „ctr“ zugreifen ' Variable direkt, da sie in der äußeren Funktion definiert ist. Dies führt zu einer ungebundenen Variablen, die den UnboundLocalError auslöst.

Lösung:

Python 3 bietet die „nonlocal“-Anweisung, um die Neubindung von Variablen in verschachtelten Bereichen zu ermöglichen. Durch Ändern des Codes, sodass er „nonlocal“ enthält, wird das Problem behoben:

<code class="python">def outer():
    ctr = 0

    def inner():
        nonlocal ctr
        ctr += 1

    inner()</code>

Für Python 2-Benutzer sind alternative Ansätze erforderlich:

  • Barename-Entfernung:
    Entfernen Sie die bloße ctr-Variable und platzieren Sie sie in einer Datenstruktur oder als Attribut. Zum Beispiel ctr = [0].
  • Variablenneuzuweisung:
    Weisen Sie die ctr-Variable innerhalb der inneren Funktion neu zu, anstatt die Barename-Neubindung zu verwenden: ctr = ctr 1.

Das obige ist der detaillierte Inhalt vonWie werden ungebundene lokale Variablenfehler in verschachtelten Funktionsbereichen behandelt?. 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