Eingebaute Ausnahmen¶
In Python müssen alle Ausnahmen Instanzen einer Klasse sein, die von BaseException abgeleitet ist. In einer try-Anweisung mit einer except-Klausel, die eine bestimmte Klasse erwähnt, behandelt diese Klausel auch alle abgeleiteten Ausnahmeklassen (aber nicht die Ausnahmeklassen, von denen *sie* abgeleitet ist). Zwei Ausnahmeklassen, die nicht durch Unterklassenbildung miteinander verbunden sind, sind niemals gleichwertig, auch wenn sie den gleichen Namen haben.
Die in diesem Kapitel aufgeführten eingebauten Ausnahmen können vom Interpreter oder von eingebauten Funktionen ausgelöst werden. Sofern nicht anders angegeben, haben sie einen „zugehörigen Wert“, der die detaillierte Ursache des Fehlers angibt. Dies kann ein String oder ein Tupel aus mehreren Informationsstücken sein (z. B. ein Fehlercode und ein String, der den Code erklärt). Der zugehörige Wert wird normalerweise als Argument an den Konstruktor der Ausnahmeklasse übergeben.
Benutzercode kann eingebaute Ausnahmen auslösen. Dies kann verwendet werden, um einen Ausnahmehandler zu testen oder um eine Fehlerbedingung zu melden, „genauso“ wie die Situation, in der der Interpreter die gleiche Ausnahme auslöst; aber Vorsicht: Es gibt nichts, was Benutzercode daran hindert, eine unangemessene Ausnahme auszulösen.
Die eingebauten Ausnahmeklassen können unterklassenbildend für neue Ausnahmen definiert werden; Programmierer werden ermutigt, neue Ausnahmen von der Klasse Exception oder einer ihrer Unterklassen abzuleiten und nicht von BaseException. Weitere Informationen zur Definition von Ausnahmen finden Sie im Python-Tutorial unter Benutzerdefinierte Ausnahmen.
Ausnahmekontext¶
Drei Attribute von Ausnahmeobjekten liefern Informationen über den Kontext, in dem die Ausnahme ausgelöst wurde
- BaseException.__context__¶
- BaseException.__cause__¶
- BaseException.__suppress_context__¶
Beim Auslösen einer neuen Ausnahme, während eine andere Ausnahme bereits behandelt wird, wird das Attribut
__context__der neuen Ausnahme automatisch auf die behandelte Ausnahme gesetzt. Eine Ausnahme kann behandelt werden, wenn eineexcept- oderfinally-Klausel oder einewith-Anweisung verwendet wird.Dieser implizite Ausnahmekontext kann mit einer expliziten Ursache ergänzt werden, indem
frommitraiseverwendet wirdraise new_exc from original_exc
Der Ausdruck nach
frommuss eine Ausnahme oderNonesein. Er wird als__cause__auf der ausgelösten Ausnahme gesetzt. Das Setzen von__cause__setzt auch implizit das Attribut__suppress_context__aufTrue, sodass die Verwendung vonraise new_exc from Noneeffektiv die alte Ausnahme durch die neue für Anzeigezwecke ersetzt (z. B.KeyErrorinAttributeErrorkonvertiert), während die alte Ausnahme zur Introspektion beim Debugging in__context__verfügbar bleibt.Der Standard-Traceback-Anzeigecode zeigt diese verketteten Ausnahmen zusätzlich zum Traceback der Ausnahme selbst an. Eine explizit verkettete Ausnahme in
__cause__wird immer angezeigt, wenn vorhanden. Eine implizit verkettete Ausnahme in__context__wird nur angezeigt, wenn__cause__Noneist und__suppress_context__falsch ist.In beiden Fällen wird die Ausnahme selbst immer nach den verketteten Ausnahmen angezeigt, sodass die letzte Zeile des Tracebacks immer die letzte ausgelöste Ausnahme anzeigt.
Erben von eingebauten Ausnahmen¶
Benutzercode kann Unterklassen erstellen, die von einem Ausnahmetyp erben. Es wird empfohlen, nur jeweils einen Ausnahmetyp zu unterklassen, um mögliche Konflikte zwischen der Handhabung des args-Attributs durch die Basisklassen zu vermeiden, sowie aufgrund möglicher Inkompatibilitäten im Speicherlayout.
CPython-Implementierungsdetail: Die meisten eingebauten Ausnahmen werden zur Effizienz in C implementiert, siehe: Objects/exceptions.c. Einige haben benutzerdefinierte Speicherlayouts, die es unmöglich machen, eine Unterklasse zu erstellen, die von mehreren Ausnahmetypen erbt. Das Speicherlayout eines Typs ist ein Implementierungsdetail und kann sich zwischen Python-Versionen ändern, was in Zukunft zu neuen Konflikten führen kann. Daher wird empfohlen, das Unterklassenbilden mehrerer Ausnahmetypen gänzlich zu vermeiden.
Basisklassen¶
Die folgenden Ausnahmen werden hauptsächlich als Basisklassen für andere Ausnahmen verwendet.
- exception BaseException¶
Die Basisklasse für alle eingebauten Ausnahmen. Sie ist nicht dazu gedacht, direkt von benutzerdefinierten Klassen abgeleitet zu werden (dafür verwenden Sie
Exception). Wennstr()auf eine Instanz dieser Klasse angewendet wird, werden die Repräsentationen der Argumente der Instanz oder ein leerer String zurückgegeben, wenn keine Argumente vorhanden waren.- args¶
Das Tupel der Argumente, die an den Ausnahmekonstruktor übergeben wurden. Einige eingebaute Ausnahmen (wie
OSError) erwarten eine bestimmte Anzahl von Argumenten und weisen den Elementen dieses Tupels eine besondere Bedeutung zu, während andere normalerweise nur mit einem einzigen String aufgerufen werden, der eine Fehlermeldung liefert.
- with_traceback(tb)¶
Diese Methode setzt tb als neuen Traceback für die Ausnahme und gibt das Ausnahmeobjekt zurück. Sie wurde vor der Verfügbarkeit der Ausnahmeverkettungsfunktionen von PEP 3134 häufiger verwendet. Das folgende Beispiel zeigt, wie eine Instanz von
SomeExceptionin eine Instanz vonOtherExceptionkonvertiert werden kann, wobei der Traceback erhalten bleibt. Nach dem Auslösen wird der aktuelle Frame auf den Traceback vonOtherExceptiongelegt, wie es auch mit dem Traceback der ursprünglichenSomeExceptionpassiert wäre, wenn wir sie an den Aufrufer weitergegeben hätten.try: ... except SomeException: tb = sys.exception().__traceback__ raise OtherException(...).with_traceback(tb)
- __traceback__¶
Ein schreibbares Feld, das das Traceback-Objekt enthält, das mit dieser Ausnahme verknüpft ist. Siehe auch: Die raise-Anweisung.
- add_note(note)¶
Fügt den String
notezu den Notizen der Ausnahme hinzu, die im Standard-Traceback nach der Fehlermeldung erscheinen. EinTypeErrorwird ausgelöst, wennnotekein String ist.Hinzugefügt in Version 3.11.
- __notes__¶
Eine Liste der Notizen dieser Ausnahme, die mit
add_note()hinzugefügt wurden. Dieses Attribut wird erstellt, wennadd_note()aufgerufen wird.Hinzugefügt in Version 3.11.
- exception Exception¶
Alle eingebauten, nicht systembeendenden Ausnahmen sind von dieser Klasse abgeleitet. Alle benutzerdefinierten Ausnahmen sollten ebenfalls von dieser Klasse abgeleitet sein.
- exception ArithmeticError¶
Die Basisklasse für die eingebauten Ausnahmen, die für verschiedene arithmetische Fehler ausgelöst werden:
OverflowError,ZeroDivisionError,FloatingPointError.
- exception BufferError¶
Wird ausgelöst, wenn eine Puffer-bezogene Operation (Puffer) nicht durchgeführt werden kann.
- exception LookupError¶
Die Basisklasse für die Ausnahmen, die ausgelöst werden, wenn ein Schlüssel oder Index, der in einer Zuordnung (Mapping) oder Sequenz verwendet wird, ungültig ist:
IndexError,KeyError. Dies kann direkt voncodecs.lookup()ausgelöst werden.
Konkrete Ausnahmen¶
Die folgenden Ausnahmen sind die Ausnahmen, die normalerweise ausgelöst werden.
- exception AttributeError¶
Wird ausgelöst, wenn ein Attributverweis (siehe Attributreferenzen) oder eine Attributzuweisung fehlschlägt. (Wenn ein Objekt Attributverweise oder Attributzuweisungen überhaupt nicht unterstützt, wird
TypeErrorausgelöst.)Die optionalen Schlüsselwortargumente name und obj setzen die entsprechenden Attribute
- name¶
Der Name des Attributs, auf das zugegriffen wurde.
- obj¶
Das Objekt, auf das für das benannte Attribut zugegriffen wurde.
- exception EOFError¶
Wird ausgelöst, wenn die Funktion
input()auf eine End-of-File-Bedingung (EOF) trifft, ohne Daten gelesen zu haben. (Hinweis: Die Methodenio.IOBase.read()undio.IOBase.readline()geben einen leeren String zurück, wenn sie EOF erreichen.)
- exception FloatingPointError¶
Derzeit nicht verwendet.
- exception GeneratorExit¶
Wird ausgelöst, wenn ein Generator oder Coroutine geschlossen wird; siehe
generator.close()undcoroutine.close(). Sie erbt direkt vonBaseExceptionanstatt vonException, da sie technisch gesehen kein Fehler ist.
- exception ImportError¶
Wird ausgelöst, wenn die
import-Anweisung Probleme beim Laden eines Moduls hat. Wird auch ausgelöst, wenn in der „from list“ vonfrom ... importein Name nicht gefunden werden kann.Die optionalen Schlüsselwortargumente name und path setzen die entsprechenden Attribute
- name¶
Der Name des Moduls, das importiert werden sollte.
- path¶
Der Pfad zu jeder Datei, die die Ausnahme ausgelöst hat.
- exception ModuleNotFoundError¶
Eine Unterklasse von
ImportError, die vonimportausgelöst wird, wenn ein Modul nicht gefunden werden konnte. Sie wird auch ausgelöst, wennNoneinsys.modulesgefunden wird.Hinzugefügt in Version 3.6.
- exception IndexError¶
Wird ausgelöst, wenn ein Sequenz-Subskript außerhalb des gültigen Bereichs liegt. (Slice-Indizes werden stillschweigend auf den zulässigen Bereich zugeschnitten; wenn ein Index keine Ganzzahl ist, wird
TypeErrorausgelöst.)
- exception KeyError¶
Wird ausgelöst, wenn ein Schlüssel einer Zuordnung (Dictionary) nicht in der Menge der vorhandenen Schlüssel gefunden wird.
- exception KeyboardInterrupt¶
Wird ausgelöst, wenn der Benutzer die Unterbrechungstaste drückt (normalerweise Control-C oder Delete). Während der Ausführung wird regelmäßig auf Unterbrechungen geprüft. Die Ausnahme erbt von
BaseException, damit sie nicht versehentlich von Code abgefangen wird, derExceptionabfängt und somit verhindert, dass der Interpreter beendet wird.Hinweis
Das Abfangen einer
KeyboardInterrupterfordert besondere Überlegungen. Da sie an unvorhersehbaren Stellen ausgelöst werden kann, kann sie das laufende Programm unter Umständen in einem inkonsistenten Zustand hinterlassen. Es ist im Allgemeinen am besten,KeyboardInterruptso schnell wie möglich das Programm beenden zu lassen oder ganz zu vermeiden. (Siehe Hinweis zu Signalhandlern und Ausnahmen.)
- exception MemoryError¶
Wird ausgelöst, wenn eine Operation keinen Speicher mehr hat, die Situation aber noch gerettet werden kann (durch Löschen einiger Objekte). Der zugehörige Wert ist ein String, der angibt, welche Art von (interner) Operation den Speicher aufgebraucht hat. Beachten Sie, dass der Interpreter aufgrund der zugrunde liegenden Speicherverwaltung (C's
malloc()-Funktion) diese Situation möglicherweise nicht immer vollständig beheben kann; er löst dennoch eine Ausnahme aus, damit ein Stack-Traceback gedruckt werden kann, falls ein außer Kontrolle geratenes Programm die Ursache war.
- exception NameError¶
Wird ausgelöst, wenn ein lokaler oder globaler Name nicht gefunden wird. Dies gilt nur für nicht qualifizierte Namen. Der zugehörige Wert ist eine Fehlermeldung, die den nicht gefundenen Namen enthält.
Das optionale Schlüsselwortargument name setzt das Attribut
- name¶
Der Name der Variablen, auf die zugegriffen werden sollte.
Geändert in Version 3.10: Attribut
namehinzugefügt.
- exception NotImplementedError¶
Diese Ausnahme ist von
RuntimeErrorabgeleitet. In benutzerdefinierten Basisklassen sollten abstrakte Methoden diese Ausnahme auslösen, wenn sie abgeleitete Klassen zwingen, die Methode zu überschreiben, oder während der Entwicklung der Klasse, um anzuzeigen, dass die tatsächliche Implementierung noch hinzugefügt werden muss.Hinweis
Sie sollte nicht verwendet werden, um anzuzeigen, dass ein Operator oder eine Methode überhaupt nicht unterstützt werden soll – hinterlassen Sie in diesem Fall entweder den Operator/die Methode undefiniert oder, wenn es sich um eine Unterklasse handelt, setzen Sie sie auf
None.Vorsicht
NotImplementedErrorundNotImplementedsind nicht austauschbar. Diese Ausnahme sollte nur wie oben beschrieben verwendet werden; sieheNotImplementedfür Details zur korrekten Verwendung der eingebauten Konstante.
- exception OSError([arg])¶
- exception OSError(errno, strerror[, filename[, winerror[, filename2]]])
Diese Ausnahme wird ausgelöst, wenn eine Systemfunktion einen systembezogenen Fehler zurückgibt, einschließlich E/A-Fehlern wie „Datei nicht gefunden“ oder „Festplatte voll“ (nicht für ungültige Argumenttypen oder andere zufällige Fehler).
Die zweite Form des Konstruktors setzt die entsprechenden Attribute, die unten beschrieben sind. Die Attribute sind standardmäßig
None, wenn nicht angegeben. Aus Kompatibilitätsgründen enthält das Attributargsnur ein 2-Tupel der ersten beiden Konstruktorargumente, wenn drei Argumente übergeben werden.Der Konstruktor gibt oft tatsächlich eine Unterklasse von
OSErrorzurück, wie in Betriebssystem-Ausnahmen weiter unten beschrieben. Die spezifische Unterklasse hängt vom endgültigenerrno-Wert ab. Dieses Verhalten tritt nur beim direkten Erstellen vonOSErroroder über einen Alias auf und wird beim Unterklassenbilden nicht vererbt.- errno¶
Ein numerischer Fehlercode aus der C-Variable
errno.
- winerror¶
Unter Windows gibt dies den nativen Windows-Fehlercode zurück. Das Attribut
errnoist dann eine ungefähre Übersetzung dieses nativen Fehlercodes in POSIX-Begriffe.Unter Windows wird, wenn das Konstruktorargument winerror eine Ganzzahl ist, das Attribut
errnoaus dem Windows-Fehlercode ermittelt, und das Argument errno wird ignoriert. Auf anderen Plattformen wird das Argument winerror ignoriert und das Attributwinerrorexistiert nicht.
- strerror¶
Die entsprechende Fehlermeldung, wie sie vom Betriebssystem bereitgestellt wird. Sie wird von den C-Funktionen
perror()unter POSIX undFormatMessage()unter Windows formatiert.
- filename¶
- filename2¶
Für Ausnahmen, die einen Dateisystempfad betreffen (wie z. B.
open()oderos.unlink()), istfilenameder an die Funktion übergebene Dateiname. Für Funktionen, die zwei Dateisystempfade betreffen (wie z. B.os.rename()), entsprichtfilename2dem zweiten an die Funktion übergebenen Dateinamen.
Geändert in Version 3.3:
EnvironmentError,IOError,WindowsError,socket.error,select.errorundmmap.errorwurden inOSErrorzusammengeführt, und der Konstruktor kann eine Unterklasse zurückgeben.Geändert in Version 3.4: Das Attribut
filenameist nun der ursprüngliche Dateiname, der an die Funktion übergeben wurde, anstatt des Namens, der in die Dateisystemkodierung und Fehlerbehandlung kodiert oder daraus dekodiert wurde. Außerdem wurde das Konstruktorargument und Attribut filename2 hinzugefügt.
- exception OverflowError¶
Wird ausgelöst, wenn das Ergebnis einer arithmetischen Operation zu groß ist, um dargestellt zu werden. Dies kann bei Ganzzahlen nicht auftreten (die eher
MemoryErrorauslösen würden, als aufzugeben). Aus historischen Gründen wird OverflowError jedoch manchmal für Ganzzahlen ausgelöst, die außerhalb eines erforderlichen Bereichs liegen. Aufgrund mangelnder Standardisierung der Gleitkomma-Ausnahmebehandlung in C werden die meisten Gleitkommaoperationen nicht überprüft.
- exception PythonFinalizationError¶
Diese Ausnahme ist von
RuntimeErrorabgeleitet. Sie wird ausgelöst, wenn eine Operation während der Interpreterbeendigung, auch bekannt als Python-Finalisierung, blockiert wird.Beispiele für Operationen, die während der Python-Finalisierung mit einem
PythonFinalizationErrorblockiert werden könnenSiehe auch die Funktion
sys.is_finalizing().Hinzugefügt in Version 3.13: Zuvor wurde ein einfacher
RuntimeErrorausgelöst.Geändert in Version 3.14:
threading.Thread.join()kann nun diese Ausnahme auslösen.
- exception RecursionError¶
Diese Ausnahme ist von
RuntimeErrorabgeleitet. Sie wird ausgelöst, wenn der Interpreter feststellt, dass die maximale Rekursionstiefe (siehesys.getrecursionlimit()) überschritten wird.Hinzugefügt in Version 3.5: Zuvor wurde ein einfacher
RuntimeErrorausgelöst.
- exception ReferenceError¶
Diese Ausnahme wird ausgelöst, wenn ein schwacher Referenz-Proxy, der von der Funktion
weakref.proxy()erstellt wurde, verwendet wird, um auf ein Attribut des referenzierten Objekts zuzugreifen, nachdem dieses vom Garbage Collector aufgeräumt wurde. Weitere Informationen zu schwachen Referenzen finden Sie im Modulweakref.
- exception RuntimeError¶
Wird ausgelöst, wenn ein Fehler erkannt wird, der in keine andere Kategorie fällt. Der zugehörige Wert ist eine Zeichenkette, die angibt, was genau schief gelaufen ist.
- exception StopIteration¶
Wird von der eingebauten Funktion
next()und der Methode__next__()eines Iterators ausgelöst, um zu signalisieren, dass keine weiteren Elemente mehr vom Iterator erzeugt werden.- value¶
Das Ausnahmeobjekt hat ein einzelnes Attribut
value, das beim Erstellen der Ausnahme als Argument übergeben wird und standardmäßigNoneist.
Wenn eine Generatorfunktion oder Coroutinenfunktion zurückkehrt, wird eine neue
StopIteration-Instanz ausgelöst und der von der Funktion zurückgegebene Wert wird als Parametervaluefür den Konstruktor der Ausnahme verwendet.Wenn ein Generator-Code direkt oder indirekt
StopIterationauslöst, wird diese in einenRuntimeErrorumgewandelt (wobeiStopIterationals Ursache der neuen Ausnahme beibehalten wird).Geändert in Version 3.3: Attribut
valueund die Möglichkeit für Generatorfunktionen, es zur Rückgabe eines Wertes zu verwenden, hinzugefügt.Geändert in Version 3.5: Einführung der RuntimeError-Transformation über
from __future__ import generator_stop, siehe PEP 479.Geändert in Version 3.7: PEP 479 standardmäßig für allen Code aktiviert: eine in einem Generator ausgelöste
StopIteration-Ausnahme wird in einenRuntimeErrorumgewandelt.
- exception StopAsyncIteration¶
Muss von der Methode
__anext__()eines asynchronen Iterators ausgelöst werden, um die Iteration zu beenden.Hinzugefügt in Version 3.5.
- exception SyntaxError(message, details)¶
Wird ausgelöst, wenn der Parser auf einen Syntaxfehler stößt. Dies kann bei einer
import-Anweisung, bei einem Aufruf der eingebauten Funktionencompile(),exec()odereval()oder beim Lesen des initialen Skripts oder der Standardeingabe (auch interaktiv) auftreten.Die
str()-Darstellung der Ausnahmeinstanz gibt nur die Fehlermeldung zurück. Details ist ein Tupel, dessen Elemente auch als separate Attribute verfügbar sind.- filename¶
Der Name der Datei, in der der Syntaxfehler aufgetreten ist.
- lineno¶
Welche Zeilennummer in der Datei der Fehler aufgetreten ist. Diese ist 1-basiert: Die erste Zeile in der Datei hat eine
linenovon 1.
- offset¶
Die Spalte in der Zeile, in der der Fehler aufgetreten ist. Diese ist 1-basiert: Das erste Zeichen in der Zeile hat einen
offsetvon 1.
- text¶
Der Quellcode-Text, der vom Fehler betroffen ist.
- end_lineno¶
Welche Zeilennummer in der Datei der Fehler endet. Diese ist 1-basiert: Die erste Zeile in der Datei hat eine
linenovon 1.
- end_offset¶
Die Spalte in der Endzeile, in der der Fehler endet. Diese ist 1-basiert: Das erste Zeichen in der Zeile hat einen
offsetvon 1.
Bei Fehlern in f-String-Feldern wird die Nachricht mit "f-string: " präfixiert, und die Offsets sind Offsets in einem Text, der aus dem Ersetzungs-Ausdruck konstruiert wurde. Zum Beispiel führt das Kompilieren von f'Bad {a b} field' zu folgenden Args-Attributen: ('f-string: ...', ('', 1, 2, '(a b)n', 1, 5)).
Geändert in Version 3.10: Attribute
end_linenoundend_offsethinzugefügt.
- exception IndentationError¶
Basisklasse für Syntaxfehler, die mit falscher Einrückung zusammenhängen. Dies ist eine Unterklasse von
SyntaxError.
- exception TabError¶
Wird ausgelöst, wenn die Einrückung eine inkonsistente Verwendung von Tabs und Leerzeichen enthält. Dies ist eine Unterklasse von
IndentationError.
- exception SystemError¶
Wird ausgelöst, wenn der Interpreter einen internen Fehler feststellt, die Situation aber nicht so ernst ist, dass er alle Hoffnungen aufgibt. Der zugehörige Wert ist eine Zeichenkette, die angibt, was schief gelaufen ist (auf Low-Level-Basis). In CPython kann dies durch unsachgemäße Verwendung der C-API von Python ausgelöst werden, z.B. durch Rückgabe eines
NULL-Wertes, ohne dass eine Ausnahme gesetzt ist.Wenn Sie sicher sind, dass diese Ausnahme nicht Ihre Schuld war oder die Schuld eines von Ihnen verwendeten Pakets war, sollten Sie dies dem Autor oder Maintainer Ihres Python-Interpreters melden. Stellen Sie sicher, dass Sie die Version des Python-Interpreters (
sys.version; sie wird auch zu Beginn einer interaktiven Python-Sitzung ausgegeben), die genaue Fehlermeldung (der zugehörige Wert der Ausnahme) und, wenn möglich, die Quelle des Programms, das den Fehler ausgelöst hat, melden.
- exception SystemExit¶
Diese Ausnahme wird von der Funktion
sys.exit()ausgelöst. Sie erbt vonBaseExceptionanstelle vonException, damit sie nicht versehentlich von Code abgefangen wird, derExceptionabfängt. Dies ermöglicht es der Ausnahme, ordnungsgemäß nach oben zu propagieren und den Interpreter zum Beenden zu veranlassen. Wenn sie nicht behandelt wird, beendet sich der Python-Interpreter; es wird kein Stack-Traceback ausgegeben. Der Konstruktor akzeptiert das gleiche optionale Argument, das ansys.exit()übergeben wird. Wenn der Wert eine Ganzzahl ist, gibt er den System-Exit-Status an (der an die C-Funktionexit()übergeben wird); wenn erNoneist, ist der Exit-Status null; wenn er einen anderen Typ hat (z.B. eine Zeichenkette), wird der Wert des Objekts ausgegeben und der Exit-Status ist eins.Ein Aufruf von
sys.exit()wird in eine Ausnahme umgewandelt, damit Bereinigungs-Handler (finally-Klauseln vontry-Anweisungen) ausgeführt werden können, und damit ein Debugger ein Skript ausführen kann, ohne die Kontrolle zu verlieren. Die Funktionos._exit()kann verwendet werden, wenn es absolut notwendig ist, sofort zu beenden (z.B. im Kindprozess nach einem Aufruf vonos.fork()).- code¶
Der Exit-Status oder die Fehlermeldung, die an den Konstruktor übergeben wird. (Standard ist
None.)
- exception TypeError¶
Wird ausgelöst, wenn eine Operation oder Funktion auf ein Objekt des ungeeigneten Typs angewendet wird. Der zugehörige Wert ist eine Zeichenkette, die Details über die Typen-Diskrepanz angibt.
Diese Ausnahme kann vom Benutzer-Code ausgelöst werden, um anzuzeigen, dass eine versuchte Operation auf einem Objekt nicht unterstützt wird und auch nicht unterstützt werden soll. Wenn ein Objekt eine bestimmte Operation unterstützen soll, aber noch keine Implementierung bereitgestellt hat, ist
NotImplementedErrordie richtige Ausnahme, die ausgelöst werden sollte.Das Übergeben von Argumenten des falschen Typs (z.B. Übergabe einer
Liste, wenn eineGanzzahlerwartet wird) sollte zu einemTypeErrorführen, aber das Übergeben von Argumenten mit falschem Wert (z.B. eine Zahl außerhalb der erwarteten Grenzen) sollte zu einemValueErrorführen.
- exception UnboundLocalError¶
Wird ausgelöst, wenn eine Referenz auf eine lokale Variable in einer Funktion oder Methode gemacht wird, aber kein Wert an diese Variable gebunden wurde. Dies ist eine Unterklasse von
NameError.
- exception UnicodeError¶
Wird ausgelöst, wenn ein Unicode-bezogener Kodierungs- oder Dekodierungsfehler auftritt. Es ist eine Unterklasse von
ValueError.UnicodeErrorhat Attribute, die den Kodierungs- oder Dekodierungsfehler beschreiben. Zum Beispiel gibterr.object[err.start:err.end]die spezifischen ungültigen Eingaben an, mit denen der Codec Probleme hatte.- encoding¶
Der Name der Kodierung, die den Fehler ausgelöst hat.
- reason¶
Eine Zeichenkette, die den spezifischen Codec-Fehler beschreibt.
- object¶
Das Objekt, das der Codec zu kodieren oder dekodieren versuchte.
- exception UnicodeEncodeError¶
Wird ausgelöst, wenn während der Kodierung ein Unicode-bezogener Fehler auftritt. Es ist eine Unterklasse von
UnicodeError.
- exception UnicodeDecodeError¶
Wird ausgelöst, wenn während der Dekodierung ein Unicode-bezogener Fehler auftritt. Es ist eine Unterklasse von
UnicodeError.
- exception UnicodeTranslateError¶
Wird ausgelöst, wenn während der Übersetzung ein Unicode-bezogener Fehler auftritt. Es ist eine Unterklasse von
UnicodeError.
- exception ValueError¶
Wird ausgelöst, wenn eine Operation oder Funktion ein Argument erhält, das den richtigen Typ, aber einen ungeeigneten Wert hat, und die Situation nicht durch eine genauere Ausnahme wie
IndexErrorbeschrieben wird.
- exception ZeroDivisionError¶
Wird ausgelöst, wenn das zweite Argument einer Divisions- oder Modulo-Operation null ist. Der zugehörige Wert ist eine Zeichenkette, die den Typ der Operanden und die Operation angibt.
Die folgenden Ausnahmen werden aus Kompatibilitätsgründen mit früheren Versionen beibehalten; ab Python 3.3 sind sie Aliase für OSError.
- exception EnvironmentError¶
- exception IOError¶
- exception WindowsError¶
Nur unter Windows verfügbar.
Betriebssystem-Ausnahmen¶
Die folgenden Ausnahmen sind Unterklassen von OSError und werden je nach Systemfehlercode ausgelöst.
- exception BlockingIOError¶
Wird ausgelöst, wenn eine Operation auf einem Objekt (z.B. Socket) blockieren würde, das für den nicht-blockierenden Betrieb eingestellt ist. Entspricht
errnoEAGAIN,EALREADY,EWOULDBLOCKundEINPROGRESS.Zusätzlich zu den Attributen von
OSErrorkannBlockingIOErrorein weiteres Attribut haben:
- exception ChildProcessError¶
Wird ausgelöst, wenn eine Operation auf einem Kindprozess fehlschlägt. Entspricht
errnoECHILD.
- exception ConnectionError¶
Eine Basisklasse für verbindungsbezogene Probleme.
Unterklassen sind
BrokenPipeError,ConnectionAbortedError,ConnectionRefusedErrorundConnectionResetError.
- exception BrokenPipeError¶
Eine Unterklasse von
ConnectionError, die ausgelöst wird, wenn versucht wird, in eine Pipe zu schreiben, deren anderes Ende geschlossen wurde, oder wenn versucht wird, in einen Socket zu schreiben, der für Schreibvorgänge heruntergefahren wurde. EntsprichterrnoEPIPEundESHUTDOWN.
- exception ConnectionAbortedError¶
Eine Unterklasse von
ConnectionError, die ausgelöst wird, wenn ein Verbindungsversuch vom Partner abgebrochen wird. EntsprichterrnoECONNABORTED.
- exception ConnectionRefusedError¶
Eine Unterklasse von
ConnectionError, die ausgelöst wird, wenn ein Verbindungsversuch vom Partner abgelehnt wird. EntsprichterrnoECONNREFUSED.
- exception ConnectionResetError¶
Eine Unterklasse von
ConnectionError, die ausgelöst wird, wenn eine Verbindung vom Partner zurückgesetzt wird. EntsprichterrnoECONNRESET.
- exception FileExistsError¶
Wird ausgelöst, wenn versucht wird, eine Datei oder ein Verzeichnis zu erstellen, das bereits existiert. Entspricht
errnoEEXIST.
- exception FileNotFoundError¶
Wird ausgelöst, wenn eine Datei oder ein Verzeichnis angefordert wird, das nicht existiert. Entspricht
errnoENOENT.
- exception InterruptedError¶
Wird ausgelöst, wenn ein Systemaufruf durch ein eingehendes Signal unterbrochen wird. Entspricht
errnoEINTR.Geändert in Version 3.5: Python versucht nun Systemaufrufe erneut, wenn sie durch ein Signal unterbrochen werden, es sei denn, der Signalhandler löst eine Ausnahme aus (siehe PEP 475 für die Begründung), anstatt
InterruptedErrorauszulösen.
- exception IsADirectoryError¶
Wird ausgelöst, wenn eine Dateioperation (wie z. B.
os.remove()) auf einem Verzeichnis angefordert wird. EntsprichterrnoEISDIR.
- exception NotADirectoryError¶
Wird ausgelöst, wenn eine Verzeichnisoperation (wie z. B.
os.listdir()) auf etwas angefordert wird, das kein Verzeichnis ist. Auf den meisten POSIX-Plattformen kann dies auch ausgelöst werden, wenn eine Operation versucht, eine Datei, die kein Verzeichnis ist, wie ein Verzeichnis zu öffnen oder zu durchlaufen. EntsprichterrnoENOTDIR.
- exception PermissionError¶
Wird ausgelöst, wenn versucht wird, eine Operation ohne ausreichende Zugriffsrechte auszuführen – z. B. Dateisystemberechtigungen. Entspricht
errnoEACCES,EPERMundENOTCAPABLE.Geändert in Version 3.11.1: WASI's
ENOTCAPABLEwird nun aufPermissionErrorabgebildet.
- exception ProcessLookupError¶
Wird ausgelöst, wenn ein bestimmter Prozess nicht existiert. Entspricht
errnoESRCH.
- exception TimeoutError¶
Wird ausgelöst, wenn eine Systemfunktion auf Systemebene abgelaufen ist. Entspricht
errnoETIMEDOUT.
Hinzugefügt in Version 3.3: Alle oben genannten Unterklassen von OSError wurden hinzugefügt.
Siehe auch
PEP 3151 - Überarbeitung der Ausnahmehierarchie für OS und IO
Warnungen¶
Die folgenden Ausnahmen werden als Warnungskategorien verwendet; weitere Details finden Sie in der Dokumentation Warnungskategorien.
- exception Warning¶
Basisklasse für Warnungskategorien.
- exception UserWarning¶
Basisklasse für Warnungen, die vom Benutzercode generiert werden.
- exception DeprecationWarning¶
Basisklasse für Warnungen über veraltete Funktionen, wenn diese Warnungen für andere Python-Entwickler bestimmt sind.
Wird von den Standard-Warnfiltern ignoriert, außer im
__main__-Modul (PEP 565). Das Aktivieren des Python Development Mode zeigt diese Warnung an.Die Deprecation-Richtlinie ist in PEP 387 beschrieben.
- exception PendingDeprecationWarning¶
Basisklasse für Warnungen über Funktionen, die veraltet sind und voraussichtlich in Zukunft veraltet werden, aber derzeit nicht veraltet sind.
Diese Klasse wird selten verwendet, da das Ausgeben einer Warnung über eine mögliche zukünftige Veralterung ungewöhnlich ist und
DeprecationWarningfür bereits aktive Veralterungen bevorzugt wird.Wird von den Standard-Warnfiltern ignoriert. Das Aktivieren des Python Development Mode zeigt diese Warnung an.
Die Deprecation-Richtlinie ist in PEP 387 beschrieben.
- exception SyntaxWarning¶
Basisklasse für Warnungen über zweifelhafte Syntax.
Diese Warnung wird typischerweise beim Kompilieren von Python-Quellcode ausgegeben und normalerweise nicht beim Ausführen bereits kompilierter Code.
- exception RuntimeWarning¶
Basisklasse für Warnungen über zweifelhaftes Laufzeitverhalten.
- exception FutureWarning¶
Basisklasse für Warnungen über veraltete Funktionen, wenn diese Warnungen für Endbenutzer von Anwendungen bestimmt sind, die in Python geschrieben sind.
- exception ImportWarning¶
Basisklasse für Warnungen über wahrscheinliche Fehler bei Modulimporten.
Wird von den Standard-Warnfiltern ignoriert. Das Aktivieren des Python Development Mode zeigt diese Warnung an.
- exception UnicodeWarning¶
Basisklasse für Warnungen im Zusammenhang mit Unicode.
- exception EncodingWarning¶
Basisklasse für Warnungen im Zusammenhang mit Encodings.
Details finden Sie unter Opt-in EncodingWarning.
Hinzugefügt in Version 3.10.
- exception ResourceWarning¶
Basisklasse für Warnungen im Zusammenhang mit der Ressourcennutzung.
Wird von den Standard-Warnfiltern ignoriert. Das Aktivieren des Python Development Mode zeigt diese Warnung an.
Hinzugefügt in Version 3.2.
Exception-Gruppen¶
Die folgenden werden verwendet, wenn es notwendig ist, mehrere unabhängige Ausnahmen auszulösen. Sie sind Teil der Ausnahmehierarchie, sodass sie wie alle anderen Ausnahmen mit except behandelt werden können. Zusätzlich werden sie von except* erkannt, das ihre Untergruppen basierend auf den Typen der enthaltenen Ausnahmen abgleicht.
- exception ExceptionGroup(msg, excs)¶
- exception BaseExceptionGroup(msg, excs)¶
Beide Ausnahmetypen kapseln die Ausnahmen in der Sequenz
excs. Der Parametermsgmuss eine Zeichenkette sein. Der Unterschied zwischen den beiden Klassen besteht darin, dassBaseExceptionGroupvonBaseExceptionerbt und jede Ausnahme kapseln kann, währendExceptionGroupvonExceptionerbt und nur Unterklassen vonExceptionkapseln kann. Dieses Design ermöglicht es, dassexcept ExceptioneineExceptionGroupabfängt, aber keineBaseExceptionGroup.Der Konstruktor
BaseExceptionGroupgibt eineExceptionGroupund keineBaseExceptionGroupzurück, wenn alle enthaltenen Ausnahmen Instanzen vonExceptionsind, sodass die Auswahl automatisch erfolgen kann. Der Konstruktor vonExceptionGrouphingegen löst einenTypeErroraus, wenn eine enthaltene Ausnahme keine Unterklasse vonExceptionist.- message¶
Das Argument
msgfür den Konstruktor. Dies ist ein schreibgeschütztes Attribut.
- exceptions¶
Ein Tupel der Ausnahmen in der Sequenz
excs, die dem Konstruktor übergeben wurde. Dies ist ein schreibgeschütztes Attribut.
- subgroup(condition)¶
Gibt eine Ausnahme-Gruppe zurück, die nur die Ausnahmen aus der aktuellen Gruppe enthält, die condition entsprechen, oder
None, wenn das Ergebnis leer ist.Die Bedingung kann ein Ausnahmetyp oder ein Tupel von Ausnahmetypen sein, in diesem Fall wird jede Ausnahme auf Übereinstimmung geprüft, mit der gleichen Prüfung, die in einer
except-Klausel verwendet wird. Die Bedingung kann auch ein aufrufbares Objekt (außer einem Typobjekt) sein, das eine Ausnahme als einziges Argument akzeptiert und für die Ausnahmen, die in der Untergruppe enthalten sein sollen, true zurückgibt.Die Verschachtelungsstruktur der aktuellen Ausnahme wird im Ergebnis beibehalten, ebenso wie die Werte ihrer Felder
message,__traceback__,__cause__,__context__und__notes__. Leere verschachtelte Gruppen werden vom Ergebnis weggelassen.Die Bedingung wird für alle Ausnahmen in der verschachtelten Ausnahme-Gruppe geprüft, einschließlich der obersten Ebene und aller verschachtelten Ausnahme-Gruppen. Wenn die Bedingung für eine solche Ausnahme-Gruppe wahr ist, wird sie vollständig in das Ergebnis aufgenommen.
Hinzugefügt in Version 3.13:
conditionkann jedes aufrufbare Objekt sein, das kein Typobjekt ist.
- split(condition)¶
Wie
subgroup(), gibt aber das Paar(match, rest)zurück, wobeimatchsubgroup(condition)undrestder verbleibende Nicht-Übereinstimmungsteil ist.
- derive(excs)¶
Gibt eine Ausnahme-Gruppe mit derselben
messagezurück, die jedoch die Ausnahmen inexcskapselt.Diese Methode wird von
subgroup()undsplit()verwendet, die in verschiedenen Kontexten zum Aufteilen einer Ausnahme-Gruppe verwendet werden. Eine Unterklasse muss sie überschreiben, umsubgroup()undsplit()Instanzen der Unterklasse anstelle vonExceptionGroupzurückgeben zu lassen.subgroup()undsplit()kopieren die Felder__traceback__,__cause__,__context__und__notes__von der ursprünglichen Ausnahme-Gruppe zu der vonderive()zurückgegebenen, sodass diese Felder nicht vonderive()aktualisiert werden müssen.>>> class MyGroup(ExceptionGroup): ... def derive(self, excs): ... return MyGroup(self.message, excs) ... >>> e = MyGroup("eg", [ValueError(1), TypeError(2)]) >>> e.add_note("a note") >>> e.__context__ = Exception("context") >>> e.__cause__ = Exception("cause") >>> try: ... raise e ... except Exception as e: ... exc = e ... >>> match, rest = exc.split(ValueError) >>> exc, exc.__context__, exc.__cause__, exc.__notes__ (MyGroup('eg', [ValueError(1), TypeError(2)]), Exception('context'), Exception('cause'), ['a note']) >>> match, match.__context__, match.__cause__, match.__notes__ (MyGroup('eg', [ValueError(1)]), Exception('context'), Exception('cause'), ['a note']) >>> rest, rest.__context__, rest.__cause__, rest.__notes__ (MyGroup('eg', [TypeError(2)]), Exception('context'), Exception('cause'), ['a note']) >>> exc.__traceback__ is match.__traceback__ is rest.__traceback__ True
Beachten Sie, dass
BaseExceptionGroup__new__()definiert, sodass Unterklassen, die eine andere Konstruktorsignatur benötigen, diese anstelle von__init__()überschreiben müssen. Zum Beispiel definiert das Folgende eine Unterklasse von Ausnahme-Gruppen, die einen Exit-Code akzeptiert und aus diesem die Nachricht der Gruppe erstellt.class Errors(ExceptionGroup): def __new__(cls, errors, exit_code): self = super().__new__(Errors, f"exit code: {exit_code}", errors) self.exit_code = exit_code return self def derive(self, excs): return Errors(excs, self.exit_code)
Ähnlich wie
ExceptionGroupkann jede Unterklasse vonBaseExceptionGroup, die auch eine Unterklasse vonExceptionist, nur Instanzen vonExceptionkapseln.Hinzugefügt in Version 3.11.
Ausnahmehierarchie¶
Die Klassenhierarchie für integrierte Ausnahmen ist
BaseException
├── BaseExceptionGroup
├── GeneratorExit
├── KeyboardInterrupt
├── SystemExit
└── Exception
├── ArithmeticError
│ ├── FloatingPointError
│ ├── OverflowError
│ └── ZeroDivisionError
├── AssertionError
├── AttributeError
├── BufferError
├── EOFError
├── ExceptionGroup [BaseExceptionGroup]
├── ImportError
│ └── ModuleNotFoundError
├── LookupError
│ ├── IndexError
│ └── KeyError
├── MemoryError
├── NameError
│ └── UnboundLocalError
├── OSError
│ ├── BlockingIOError
│ ├── ChildProcessError
│ ├── ConnectionError
│ │ ├── BrokenPipeError
│ │ ├── ConnectionAbortedError
│ │ ├── ConnectionRefusedError
│ │ └── ConnectionResetError
│ ├── FileExistsError
│ ├── FileNotFoundError
│ ├── InterruptedError
│ ├── IsADirectoryError
│ ├── NotADirectoryError
│ ├── PermissionError
│ ├── ProcessLookupError
│ └── TimeoutError
├── ReferenceError
├── RuntimeError
│ ├── NotImplementedError
│ ├── PythonFinalizationError
│ └── RecursionError
├── StopAsyncIteration
├── StopIteration
├── SyntaxError
│ └── IndentationError
│ └── TabError
├── SystemError
├── TypeError
├── ValueError
│ └── UnicodeError
│ ├── UnicodeDecodeError
│ ├── UnicodeEncodeError
│ └── UnicodeTranslateError
└── Warning
├── BytesWarning
├── DeprecationWarning
├── EncodingWarning
├── FutureWarning
├── ImportWarning
├── PendingDeprecationWarning
├── ResourceWarning
├── RuntimeWarning
├── SyntaxWarning
├── UnicodeWarning
└── UserWarning