


Warum erhalte ich NameError oder UnboundLocalError bei der Behandlung von Ausnahmen in Python 3.x?
Verstehen der NameError- und UnboundLocalError-Probleme mit benannten Ausnahmen
In Python 2.x hat das folgende Codefragment den Wert der benannten Ausnahmen entsprechend gedruckt Ausnahme, exc, außerhalb des Ausnahmeblocks:
<code class="python">exc = None try: raise Exception except Exception as exc: pass print(exc)</code>
In Python 3.x führt der Versuch desselben Codes jedoch zu einem NameError (oder UnboundLocalError in einem Funktionskontext). Um dieses Problem zu beheben, ist es wichtig, die Gründe für das aktualisierte Verhalten von Python zu verstehen.
Python 3.x-Ausnahmebereich und -Bereinigung
Die außer-Anweisung in Python 3.x schränkt den Umfang der gebundenen Ausnahme explizit ein, um Zirkelverweise und vorzeitige Speicherbereinigung zu verhindern. Wenn eine Ausnahme mithilfe der As-Syntax zugewiesen wird, wird sie am Ende der Except-Klausel gelöscht. Dies macht es erforderlich, der Ausnahme für den weiteren Zugriff einen anderen Namen außerhalb des Ausnahmeblocks zuzuweisen.
Eine einfache Neuzuweisung von exc = exc reicht nicht aus, da die Ausnahmeklausel keinen neuen Bereich erstellt. Stattdessen wird der in der Ausnahmezuweisung angegebene Name aus der aktuellen entfernt.
Historischer Kontext und Python 2.x-Verhalten
In Python 2.x gab es Ausnahmen keinen Verweis auf den Traceback besitzen, sodass keine so strenge Bereinigung wie in Python 3.x erforderlich ist. Durch das Fehlen von Zirkelverweisen konnten Ausnahmen an benannte Variablen außerhalb des Except-Blocks gebunden werden, ohne dass es zu Problemen kam.
Empfehlungen für den Umgang mit Ausnahmen
Um Ausnahmen in Python 3 effektiv zu behandeln .x werden die folgenden Richtlinien empfohlen:
- Binden Sie die Ausnahme an eine neue Variable außerhalb der Ausnahmeklausel.
- Löschen Sie bei Bedarf explizit die Traceback-Referenz, um Zirkelverweise zu verhindern und zu erleichtern Garbage Collection.
Der folgende Code veranschaulicht diese Empfehlungen:
<code class="python">try: raise Exception("foo") except Exception as e: exc = e # Bind to a new variable exc.__traceback__ = None # Explicitly clear traceback</code>
Durch die Einhaltung dieser Vorgehensweisen können Sie Ausnahmen in Python 3.x sicher behandeln und darauf zugreifen und dabei Fallstricke vermeiden gestellt durch NameError und UnboundLocalError.
Das obige ist der detaillierte Inhalt vonWarum erhalte ich NameError oder UnboundLocalError bei der Behandlung von Ausnahmen in Python 3.x?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

So verwenden Sie Python, um die ZiPF -Verteilung einer Textdatei zu finden

So herunterladen Sie Dateien in Python

Wie benutze ich eine schöne Suppe, um HTML zu analysieren?

Wie man mit PDF -Dokumenten mit Python arbeitet

Wie kann man mit Redis in Django -Anwendungen zwischenstrichen

Einführung des natürlichen Sprach -Toolkits (NLTK)

Wie führe ich ein tiefes Lernen mit Tensorflow oder Pytorch durch?
