Heim Backend-Entwicklung Python-Tutorial Warum erhalte ich NameError oder UnboundLocalError bei der Behandlung von Ausnahmen in Python 3.x?

Warum erhalte ich NameError oder UnboundLocalError bei der Behandlung von Ausnahmen in Python 3.x?

Oct 29, 2024 am 08:50 AM

Why Do I Get NameError or UnboundLocalError When Handling Exceptions 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>
Nach dem Login kopieren

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:

  1. Binden Sie die Ausnahme an eine neue Variable außerhalb der Ausnahmeklausel.
  2. 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>
Nach dem Login kopieren

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!

Erklärung dieser Website
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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

So verwenden Sie Python, um die ZiPF -Verteilung einer Textdatei zu finden So verwenden Sie Python, um die ZiPF -Verteilung einer Textdatei zu finden Mar 05, 2025 am 09:58 AM

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

So herunterladen Sie Dateien in Python So herunterladen Sie Dateien in Python Mar 01, 2025 am 10:03 AM

So herunterladen Sie Dateien in Python

Bildfilterung in Python Bildfilterung in Python Mar 03, 2025 am 09:44 AM

Bildfilterung in Python

Wie benutze ich eine schöne Suppe, um HTML zu analysieren? Wie benutze ich eine schöne Suppe, um HTML zu analysieren? Mar 10, 2025 pm 06:54 PM

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

Wie man mit PDF -Dokumenten mit Python arbeitet Wie man mit PDF -Dokumenten mit Python arbeitet Mar 02, 2025 am 09:54 AM

Wie man mit PDF -Dokumenten mit Python arbeitet

Wie kann man mit Redis in Django -Anwendungen zwischenstrichen Wie kann man mit Redis in Django -Anwendungen zwischenstrichen Mar 02, 2025 am 10:10 AM

Wie kann man mit Redis in Django -Anwendungen zwischenstrichen

Einführung des natürlichen Sprach -Toolkits (NLTK) Einführung des natürlichen Sprach -Toolkits (NLTK) Mar 01, 2025 am 10:05 AM

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

Wie führe ich ein tiefes Lernen mit Tensorflow oder Pytorch durch? Wie führe ich ein tiefes Lernen mit Tensorflow oder Pytorch durch? Mar 10, 2025 pm 06:52 PM

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

See all articles