Heim  >  Artikel  >  Backend-Entwicklung  >  Wie unterscheidet sich der Umfang benannter Ausnahmen zwischen Python 2.x und 3.x?

Wie unterscheidet sich der Umfang benannter Ausnahmen zwischen Python 2.x und 3.x?

Barbara Streisand
Barbara StreisandOriginal
2024-10-29 18:34:54451Durchsuche

How does the scope of named exceptions differ between Python 2.x and 3.x?

Ausnahmebereich und Zuweisen gebundener Ausnahmen in Python

In Python ist es wichtig, den Umfang benannter Ausnahmen nach Abschluss des Except-Blocks zu verstehen. Dies wird deutlich, wenn man das Verhalten von Python 2.x und 3.x vergleicht.

Python 3.x-Verhalten: NameError und UnboundLocalError

In Python 3.x wird versucht, dies zu tun Der Zugriff auf eine in einem Ausnahmeblock außerhalb dieses Blocks benannte Ausnahme führt entweder zu einem NameError (bei Zugriff außerhalb einer Funktion) oder einem UnboundLocalError (bei Zugriff innerhalb einer Funktion).

Grund für die Änderung

Diese Änderung ist auf die Entscheidung von Python 3.x zurückzuführen, den Umfang benannter Ausnahmen explizit innerhalb der Ausnahmeklausel einzuschränken. Dies dient dazu, Zirkelverweise zu verhindern und die Notwendigkeit zu vermeiden, Tracebacks explizit zu bereinigen.

Problemumgehung

Um auf eine Ausnahme außerhalb des Except-Blocks zuzugreifen, ist es notwendig, sie erneut daran zu binden ein neuer Name. Zum Beispiel:

<code class="python">exc = None
try:
    raise Exception
except Exception as exc:
    exc = exc # Rebinding to a new name</code>

Explizites Traceback-Löschen

Falls gewünscht, ist es möglich, das Traceback nach dem erneuten Binden der Ausnahme explizit zu löschen:

<code class="python">exc = None
try:
    raise Exception("foo")
except Exception as e:
    exc = e
    exc.__traceback__ = None</code>

Im Gegensatz zu Python 2.x

In Python 2.x enthielten Ausnahmen keine Verweise auf ihren Traceback, daher war diese Bereichseinschränkung nicht erforderlich. Daher hatte die Zuweisung der Ausnahme zu einer Variablen nach dem Except-Block keine negativen Folgen.

Das obige ist der detaillierte Inhalt vonWie unterscheidet sich der Umfang benannter Ausnahmen zwischen Python 2.x und 3.x?. 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