Eingebaute Exceptions¶
In Python müssen alle Exceptions Instanzen einer Klasse sein, die von BaseException abgeleitet ist. In einer try-Anweisung mit einer except-Klausel, die eine bestimmte Klasse angibt, behandelt diese Klausel auch alle Exception-Klassen, die von dieser Klasse abgeleitet sind (jedoch keine Exception-Klassen, von denen sie abgeleitet ist). Zwei Exception-Klassen, die nicht durch Vererbung miteinander verwandt sind, sind niemals äquivalent, selbst wenn sie denselben Namen tragen.
Die in diesem Kapitel aufgeführten eingebauten Exceptions können vom Interpreter oder von eingebauten Funktionen erzeugt werden. Sofern nicht anders angegeben, besitzen sie einen „zugehörigen Wert“, der die genaue Fehlerursache angibt. Dies kann eine Zeichenkette oder ein Tupel aus mehreren Informationselementen sein (z. B. ein Fehlercode und eine Zeichenkette, die den Code erklärt). Der zugehörige Wert wird üblicherweise als Argument an den Konstruktor der Exception-Klasse übergeben.
Benutzercode kann eingebaute Exceptions auslösen. Dies kann genutzt werden, um einen Exception-Handler zu testen oder einen Fehlerzustand „genauso“ zu melden wie in der Situation, in der der Interpreter dieselbe Exception auslösen würde. Beachte jedoch, dass Benutzercode nicht daran gehindert wird, einen unpassenden Fehler auszulösen.
Von den eingebauten Exception-Klassen können Unterklassen abgeleitet werden, um neue Exceptions zu definieren. Es wird empfohlen, neue Exceptions von der Klasse Exception oder einer ihrer Unterklassen abzuleiten und nicht von BaseException. Weitere Informationen zur Definition von Exceptions findest du im Python-Tutorial unter Benutzerdefinierte Ausnahmen.
Exception-Kontext¶
Drei Attribute von Exception-Objekten liefern Informationen über den Kontext, in dem die Exception ausgelöst wurde:
- BaseException.__context__¶
- BaseException.__cause__¶
- BaseException.__suppress_context__¶
Wird eine neue Exception ausgelöst, während bereits eine andere Exception behandelt wird, wird das Attribut
__context__der neuen Exception automatisch auf die behandelte Exception gesetzt. Eine Exception wird behandelt, wenn eineexcept- oderfinally-Klausel oder einewith-Anweisung verwendet wird.Dieser implizite Exception-Kontext kann durch die Verwendung von
fromzusammen mitraiseum eine explizite Ursache ergänzt werden:raise new_exc from original_exc
Der Ausdruck nach
frommuss eine Exception oderNonesein. Er wird als__cause__für die ausgelöste Exception gesetzt. Das Setzen von__cause__setzt außerdem implizit das Attribut__suppress_context__aufTrue, sodass die Verwendung vonraise new_exc from Nonefür Anzeigezwecke die alte Exception effektiv durch die neue ersetzt (z. B. bei der Umwandlung vonKeyErrorinAttributeError), während die alte Exception für die Introspektion beim Debuggen weiterhin in__context__verfügbar bleibt.Die Standardausgabe des Tracebacks zeigt diese verketteten Exceptions zusätzlich zum Traceback der Exception selbst an. Eine explizit verkettete Exception in
__cause__wird immer angezeigt, sofern vorhanden. Eine implizit verkettete Exception in__context__wird nur angezeigt, wenn__cause__Noneund__suppress_context__falsch ist.In beiden Fällen wird die Exception selbst immer nach allen verketteten Exceptions angezeigt, sodass die letzte Zeile des Tracebacks immer die zuletzt ausgelöste Exception zeigt.
Erben von eingebauten Exceptions¶
Benutzercode kann Unterklassen erstellen, die von einem Exception-Typ erben. Es wird empfohlen, immer nur von einem Exception-Typ gleichzeitig zu erben, um mögliche Konflikte bei der Handhabung des args-Attributs durch die Basisklassen sowie Inkompatibilitäten beim Speicherlayout zu vermeiden.
Die meisten eingebauten Exceptions sind aus Effizienzgründen in C implementiert, siehe Objects/exceptions.c. Einige besitzen spezielle Speicherlayouts, die es unmöglich machen, eine Unterklasse zu erstellen, die von mehreren Exception-Typen erbt. Das Speicherlayout eines Typs ist ein Implementierungsdetail und kann sich zwischen Python-Versionen ändern, was künftig zu neuen Konflikten führen könnte. Daher wird empfohlen, das gleichzeitige Erben von mehreren Exception-Typen gänzlich zu vermeiden.
Basisklassen¶
Die folgenden Exceptions werden hauptsächlich als Basisklassen für andere Exceptions verwendet.
- exception BaseException¶
Die Basisklasse für alle eingebauten Exceptions. Sie ist nicht dazu gedacht, direkt von benutzerdefinierten Klassen geerbt zu werden (verwende dafür
Exception). Wirdstr()für eine Instanz dieser Klasse aufgerufen, wird die Darstellung der an die Instanz übergebenen Argumente zurückgegeben oder eine leere Zeichenkette, falls keine Argumente vorhanden waren.- args¶
Das Tupel der Argumente, die an den Exception-Konstruktor übergeben wurden. Einige eingebaute Exceptions (wie
OSError) erwarten eine bestimmte Anzahl von Argumenten und weisen den Elementen dieses Tupels eine spezielle Bedeutung zu, während andere üblicherweise nur mit einer einzelnen Zeichenkette aufgerufen werden, die eine Fehlermeldung enthält.
- with_traceback(tb)¶
Diese Methode setzt tb als neuen Traceback für die Exception und gibt das Exception-Objekt zurück. Sie wurde vor der Einführung der Exception-Verkettung aus PEP 3134 häufiger verwendet. Das folgende Beispiel zeigt, wie eine Instanz von
SomeExceptionunter Beibehaltung des Tracebacks in eine Instanz vonOtherExceptionumgewandelt werden kann. Sobald sie ausgelöst wird, wird der aktuelle Frame auf den Traceback vonOtherExceptiongelegt – genauso, wie es beim Traceback der ursprünglichenSomeExceptiongeschehen wäre, wenn sie an den Aufrufer weitergeleitet worden wäre.try: ... except SomeException: tb = sys.exception().__traceback__ raise OtherException(...).with_traceback(tb)
- __traceback__¶
Ein beschreibbares Feld, das das mit dieser Exception verknüpfte Traceback-Objekt enthält. Siehe auch Die raise Anweisung.
- add_note(note)¶
Fügt die Zeichenkette
notezu den Notizen der Exception hinzu, die im Standard-Traceback nach der Exception-Zeichenkette angezeigt werden. Es wird einTypeErrorausgelöst, wennnotekeine Zeichenkette ist.Added in version 3.11.
- __notes__¶
Eine Liste der Notizen dieser Exception, die mit
add_note()hinzugefügt wurden. Dieses Attribut wird erstellt, wennadd_note()aufgerufen wird.Added in version 3.11.
- exception Exception¶
Alle eingebauten Exceptions, die das System nicht beenden, sind von dieser Klasse abgeleitet. Alle benutzerdefinierten Exceptions sollten ebenfalls von dieser Klasse abgeleitet werden.
- exception ArithmeticError¶
Die Basisklasse für diejenigen eingebauten Exceptions, die bei verschiedenen Rechenfehlern ausgelöst werden:
OverflowError,ZeroDivisionError,FloatingPointError.
- exception BufferError¶
Wird ausgelöst, wenn eine Operation im Zusammenhang mit einem Puffer nicht ausgeführt werden kann.
- exception LookupError¶
Die Basisklasse für Exceptions, die ausgelöst werden, wenn ein für ein Mapping oder eine Sequenz verwendeter Schlüssel oder Index ungültig ist:
IndexError,KeyError. Dies kann direkt voncodecs.lookup()ausgelöst werden.
Konkrete Exceptions¶
Die folgenden Exceptions sind diejenigen, die üblicherweise ausgelöst werden.
- exception AttributeError¶
Wird ausgelöst, wenn eine Attribut-Referenzierung (siehe Attributverweise) oder -Zuweisung fehlschlägt. (Wenn ein Objekt überhaupt keine Attribut-Referenzierungen oder -Zuweisungen unterstützt, wird ein
TypeErrorausgelöst.)Die optionalen reinen Schlüsselwort-Argumente name und obj setzen die entsprechenden Attribute:
- name¶
Der Name des Attributs, auf das zugegriffen werden sollte.
- obj¶
Das Objekt, auf dessen genanntes Attribut zugegriffen wurde.
- exception EOFError¶
Wird ausgelöst, wenn die Funktion
input()eine End-of-File-Bedingung (EOF) erreicht, ohne Daten zu lesen. (Hinweis: Die Methodenio.TextIOBase.read()undio.IOBase.readline()geben eine leere Zeichenkette zurück, wenn sie auf EOF stoßen.)
- exception FloatingPointError¶
Wird derzeit nicht verwendet.
- exception GeneratorExit¶
Wird ausgelöst, wenn ein Generator oder eine Coroutine geschlossen wird; siehe
generator.close()undcoroutine.close(). Sie erbt direkt vonBaseExceptionstatt vonException, da es sich technisch gesehen um keinen Fehler handelt.
- exception ImportError¶
Wird ausgelöst, wenn die
import-Anweisung Probleme beim Laden eines Moduls hat. Wird auch ausgelöst, wenn die „from-Liste“ infrom ... importeinen Namen enthält, der nicht gefunden werden kann.Die optionalen reinen Schlüsselwort-Argumente name und path setzen die entsprechenden Attribute:
- name¶
Der Name des Moduls, das importiert werden sollte.
- path¶
Der Pfad zu einer Datei, die die Exception 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.modulesvorgefunden wird.Added in version 3.6.
- exception IndexError¶
Wird ausgelöst, wenn ein Sequenzindex außerhalb des gültigen Bereichs liegt. (Slice-Indizes werden stillschweigend gekürzt, um in den zulässigen Bereich zu fallen; wenn ein Index keine Ganzzahl ist, wird ein
TypeErrorausgelöst.)
- exception KeyError¶
Wird ausgelöst, wenn ein Mapping-Schlüssel (Dictionary-Schlüssel) 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 Exception erbt von
BaseException, damit sie nicht versehentlich von Code abgefangen wird, derExceptionfängt, und so das Beenden des Interpreters verhindert.Bemerkung
Das Abfangen eines
KeyboardInterrupterfordert besondere Vorsicht. Da er an unvorhersehbaren Stellen ausgelöst werden kann, kann er das laufende Programm unter Umständen in einem inkonsistenten Zustand hinterlassen. Es ist im Allgemeinen am besten, demKeyboardInterruptzu erlauben, das Programm so schnell wie möglich zu beenden, oder das Auslösen gänzlich zu vermeiden. (Siehe Note on Signal Handlers and Exceptions.)
- exception MemoryError¶
Wird ausgelöst, wenn einer Operation der Speicher ausgeht, die Situation aber noch gerettet werden kann (durch Löschen einiger Objekte). Der zugehörige Wert ist eine Zeichenkette, die angibt, welcher Art von (interner) Operation der Speicher ausgegangen ist. Beachte, dass sich der Interpreter aufgrund der zugrunde liegenden Speicherverwaltungsarchitektur (C-Funktion
malloc()) möglicherweise nicht immer vollständig von dieser Situation erholen kann; er löst dennoch eine Exception aus, damit ein Stack-Traceback ausgegeben 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 unqualifizierte Namen. Der zugehörige Wert ist eine Fehlermeldung, die den nicht auffindbaren Namen enthält.
Das optionale reine Schlüsselwort-Argument name setzt das Attribut:
- name¶
Der Name der Variable, auf die zugegriffen werden sollte.
Geändert in Version 3.10: Das Attribut
namewurde hinzugefügt.
- exception NotImplementedError¶
Diese Exception ist von
RuntimeErrorabgeleitet. In benutzerdefinierten Basisklassen sollten abstrakte Methoden diese Exception auslösen, wenn abgeleitete Klassen die Methode überschreiben müssen oder während die Klasse entwickelt wird, um anzuzeigen, dass die eigentliche Implementierung noch ergänzt werden muss.Bemerkung
Sie sollte nicht verwendet werden, um anzuzeigen, dass ein Operator oder eine Methode überhaupt nicht unterstützt werden soll – belasse in diesem Fall den Operator bzw. die Methode entweder undefiniert oder setze sie in einer Unterklasse auf
None.Vorsicht
NotImplementedErrorundNotImplementedsind nicht austauschbar. Diese Exception 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 Exception wird ausgelöst, wenn eine Systemfunktion einen systembezogenen Fehler zurückgibt, einschließlich E/A-Fehlern wie „Datei nicht gefunden“ oder „Festplatte voll“ (nicht bei unzulässigen Argumenttypen oder anderen beiläufigen Fehlern).
Die zweite Form des Konstruktors setzt die entsprechenden, unten beschriebenen Attribute. Sofern nicht angegeben, sind die Attribute standardmäßig
None. Aus Gründen der Abwärtskompatibilität enthält das Attributargsbei Übergabe von drei Argumenten nur ein 2-Tupel der ersten beiden Konstruktorargumente.Der Konstruktor gibt häufig tatsächlich eine Unterklasse von
OSErrorzurück, wie unten in OS exceptions beschrieben. Die jeweilige Unterklasse hängt vom endgültigen Wert vonerrnoab. Dieses Verhalten tritt nur auf, wennOSErrordirekt oder über einen Alias konstruiert wird, und wird beim Erstellen von Unterklassen nicht vererbt.- errno¶
Ein numerischer Fehlercode aus der C-Variable
errno.
- winerror¶
Unter Windows liefert dies den nativen Windows-Fehlercode. Das Attribut
errnoist dann eine ungefähre Übersetzung dieses nativen Fehlercodes in POSIX-Begriffe.Wenn unter Windows das Konstruktorargument winerror eine Ganzzahl ist, wird das Attribut
errnoaus dem Windows-Fehlercode bestimmt 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 unter POSIX durch die C-Funktion
perror()und unter Windows durchFormatMessage()formatiert.
- filename¶
- filename2¶
Bei Exceptions, die einen Dateisystempfad betreffen (wie
open()oderos.unlink()), istfilenameder an die Funktion übergebene Dateiname. Bei Funktionen, die zwei Dateisystempfade betreffen (wieos.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, an die Funktion übergebene Dateiname anstelle des Namens, der in die oder aus der Dateisystem-Kodierung und der Fehlerbehandler kodiert oder dekodiert wurde. Zudem wurden das Konstruktorargument und das 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 vorkommen (die eher einen
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 der fehlenden Standardisierung der Behandlung von Gleitkomma-Exceptions in C werden die meisten Gleitkommaoperationen nicht überprüft.
- exception PythonFinalizationError¶
Diese Exception ist von
RuntimeErrorabgeleitet. Sie wird ausgelöst, wenn eine Operation während des Herunterfahrens des Interpreters blockiert wird, auch bekannt als Python-Finalisierung.Beispiele für Operationen, die während der Python-Finalisierung mit einem
PythonFinalizationErrorblockiert werden können:Erstellen eines neuen Python-Threads.
Siehe auch die Funktion
sys.is_finalizing().Added in version 3.13: Zuvor wurde ein einfacher
RuntimeErrorausgelöst.
- exception RecursionError¶
Diese Exception ist von
RuntimeErrorabgeleitet. Sie wird ausgelöst, wenn der Interpreter feststellt, dass die maximale Rekursionstiefe (siehesys.getrecursionlimit()) überschritten wurde.Added in version 3.5: Zuvor wurde ein einfacher
RuntimeErrorausgelöst.
- exception ReferenceError¶
Diese Exception wird ausgelöst, wenn ein von der Funktion
weakref.proxy()erstellter Proxy für schwache Referenzen verwendet wird, um auf ein Attribut des Referenzobjekts zuzugreifen, nachdem dieses von der Garbage Collection bereinigt wurde. Weitere Informationen zu schwachen Referenzen findest du im Modulweakref.
- exception RuntimeError¶
Wird ausgelöst, wenn ein Fehler erkannt wird, der in keine der anderen Kategorien fällt. Der zugehörige Wert ist eine Zeichenkette, die angibt, was genau schiefgelaufen ist.
- exception StopIteration¶
Wird von der eingebauten Funktion
next()und der Methode__next__()eines Iterators ausgelöst, um zu signalisieren, dass vom Iterator keine weiteren Elemente erzeugt werden.- value¶
Das Exception-Objekt besitzt ein einzelnes Attribut
value, das bei der Konstruktion der Exception als Argument übergeben wird und standardmäßigNoneist.
Wenn eine Generator- oder Coroutine-Funktion zurückkehrt, wird eine neue
StopIteration-Instanz ausgelöst und der von der Funktion zurückgegebene Wert alsvalue-Parameter an den Konstruktor der Exception übergeben.Wenn Generatorcode direkt oder indirekt
StopIterationauslöst, wird dies in einenRuntimeErrorumgewandelt (wobei dieStopIterationals Ursache der neuen Exception beibehalten wird).Geändert in Version 3.3: Das Attribut
valueund die Möglichkeit für Generatorfunktionen, damit einen Wert zurückzugeben, wurden hinzugefügt.Geändert in Version 3.5: Die RuntimeError-Umwandlung über
from __future__ import generator_stopwurde eingeführt, siehe PEP 479.Geändert in Version 3.7: PEP 479 wurde standardmäßig für sämtlichen Code aktiviert: Ein in einem Generator ausgelöster
StopIteration-Fehler wird in einenRuntimeErrorumgewandelt.
- exception StopAsyncIteration¶
Muss von der Methode
__anext__()eines asynchronen Iterators ausgelöst werden, um die Iteration zu stoppen.Added in version 3.5.
- exception SyntaxError(message, details)¶
Wird ausgelöst, wenn der Parser auf einen Syntaxfehler stößt. Dies kann in einer
import-Anweisung, bei einem Aufruf der eingebauten Funktionencompile(),exec()odereval()oder beim Einlesen des ursprünglichen Skripts bzw. der Standardeingabe (auch interaktiv) geschehen.Der Aufruf von
str()auf der Exception-Instanz gibt nur die Fehlermeldung zurück. Die Details sind ein Tupel, dessen Elemente auch als separate Attribute verfügbar sind.- filename¶
Der Name der Datei, in der der Syntaxfehler aufgetreten ist.
- lineno¶
Die Zeilennummer in der Datei, in der der Fehler aufgetreten ist. Die Zählung beginnt bei 1: Die erste Zeile in der Datei hat die
lineno1.
- offset¶
Die Spalte in der Zeile, in der der Fehler aufgetreten ist. Die Zählung beginnt bei 1: Das erste Zeichen in der Zeile hat den
offset1.
- text¶
Der Quelltext, der an dem Fehler beteiligt war.
- end_lineno¶
Die Zeilennummer in der Datei, in der der Fehler endet. Die Zählung beginnt bei 1: Die erste Zeile in der Datei hat die
lineno1.
- end_offset¶
Die Spalte in der Endzeile, an der der Fehler endet. Die Zählung beginnt bei 1: Das erste Zeichen in der Zeile hat den
offset1.
Bei Fehlern in f-String-Feldern wird der Meldung „f-string: “ vorangestellt und die Offsets beziehen sich auf einen aus dem Ersetzungsausdruck konstruierten Text. Beispielsweise führt das Kompilieren von f’Bad {a b} field‘ zu folgendem args-Attribut: (‚f-string: …‘, (‚‘, 1, 2, ‚(a b)n‘, 1, 5)).
Geändert in Version 3.10: Die Attribute
end_linenoundend_offsetwurden hinzugefügt.
- exception IndentationError¶
Basisklasse für Syntaxfehler im Zusammenhang mit fehlerhafter Einrückung. Dies ist eine Unterklasse von
SyntaxError.
- exception TabError¶
Wird ausgelöst, wenn die Einrückung eine uneinheitliche Verwendung von Tabs und Leerzeichen aufweist. Dies ist eine Unterklasse von
IndentationError.
- exception SystemError¶
Wird ausgelöst, wenn der Interpreter einen internen Fehler findet, die Situation jedoch nicht so gravierend erscheint, dass alle Hoffnung verloren ist. Der zugehörige Wert ist eine Zeichenkette, die (in systemnahen Begriffen) angibt, was schiefgelaufen ist. In CPython könnte dies durch die fehlerhafte Nutzung der C-API von Python ausgelöst werden, etwa durch die Rückgabe eines
NULL-Wertes, ohne dass eine Exception gesetzt wurde.Wenn du sicher bist, dass diese Exception nicht durch deinen eigenen Fehler oder den eines verwendeten Pakets verursacht wurde, solltest du dies dem Autor oder Betreuer deines Python-Interpreters melden. Achte darauf, die Version des Python-Interpreters anzugeben (
sys.version; sie wird auch zu Beginn einer interaktiven Python-Sitzung ausgegeben), die genaue Fehlermeldung (den zugehörigen Wert der Exception) und nach Möglichkeit den Quelltext des Programms, das den Fehler ausgelöst hat.
- exception SystemExit¶
Diese Exception wird von der Funktion
sys.exit()ausgelöst. Sie erbt vonBaseExceptionanstelle vonException, damit sie nicht versehentlich von Code abgefangen wird, derExceptionbehandelt. Dadurch kann die Exception sauber nach oben weitergereicht werden und das Beenden des Interpreters veranlassen. Wenn sie nicht behandelt wird, beendet sich der Python-Interpreter; es wird kein Stack-Traceback ausgegeben. Der Konstruktor akzeptiert dasselbe optionale Argument, das auch ansys.exit()übergeben wird. Wenn der Wert eine Ganzzahl ist, gibt er den System-Exit-Status an (übergeben an die C-Funktionexit()); ist erNone, ist der Exit-Status null; hat er einen anderen Typ (z. B. eine Zeichenkette), wird der Wert des Objekts ausgegeben und der Exit-Status ist eins.Ein Aufruf von
sys.exit()wird in eine Exception umgewandelt, damit Bereinigungs-Handler (finally-Klauseln vontry-Anweisungen) ausgeführt werden können und ein Debugger ein Skript ausführen kann, ohne Gefahr zu laufen, die Kontrolle zu verlieren. Die Funktionos._exit()kann verwendet werden, wenn ein sofortiges Beenden zwingend erforderlich ist (beispielsweise im Kindprozess nach einem Aufruf vonos.fork()).- code¶
Der Exit-Status oder die Fehlermeldung, die an den Konstruktor übergeben wird. (Standardwert ist
None.)
- exception TypeError¶
Wird ausgelöst, wenn eine Operation oder Funktion auf ein Objekt eines unpassenden Typs angewendet wird. Der zugehörige Wert ist eine Zeichenkette, die Details über die Typabweichung enthält.
Diese Exception kann von Benutzercode 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 gegebene Operation unterstützen soll, dafür aber noch keine Implementierung bereitgestellt hat, ist
NotImplementedErrordie passende Exception.Die Übergabe von Argumenten des falschen Typs (z. B. die Übergabe einer
list, wenn eininterwartet wird) sollte zu einemTypeErrorführen, die Übergabe von Argumenten mit dem falschen Wert (z. B. eine Zahl außerhalb der erwarteten Grenzen) jedoch zu einemValueError.
- exception UnboundLocalError¶
Wird ausgelöst, wenn in einer Funktion oder Methode auf eine lokale Variable verwiesen wird, an diese Variable jedoch kein Wert gebunden ist. Dies ist eine Unterklasse von
NameError.
- exception UnicodeError¶
Wird ausgelöst, wenn ein Unicode-bezogener Kodierungs- oder Dekodierungsfehler auftritt. Dies ist eine Unterklasse von
ValueError.UnicodeErrorbesitzt Attribute, die den Kodierungs- oder Dekodierungsfehler beschreiben. Beispielsweise lieferterr.object[err.start:err.end]die konkrete ungültige Eingabe, an der der Codec gescheitert ist.- 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 bei der Kodierung ein Unicode-bezogener Fehler auftritt. Dies ist eine Unterklasse von
UnicodeError.
- exception UnicodeDecodeError¶
Wird ausgelöst, wenn bei der Dekodierung ein Unicode-bezogener Fehler auftritt. Dies ist eine Unterklasse von
UnicodeError.
- exception UnicodeTranslateError¶
Wird ausgelöst, wenn bei der Übersetzung ein Unicode-bezogener Fehler auftritt. Dies ist eine Unterklasse von
UnicodeError.
- exception ValueError¶
Wird ausgelöst, wenn eine Operation oder Funktion ein Argument erhält, das zwar den richtigen Typ, aber einen unpassenden Wert besitzt, und die Situation nicht durch eine präzisere Exception 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 Exceptions werden aus Kompatibilitätsgründen mit früheren Versionen beibehalten; ab Python 3.3 sind sie Aliase von OSError.
- exception EnvironmentError¶
- exception IOError¶
- exception WindowsError¶
Nur unter Windows verfügbar.
OS-Exceptions¶
Die folgenden Exceptions sind Unterklassen von OSError; sie werden in Abhängigkeit vom 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 konfiguriert ist. Entspricht der
errnoEAGAIN,EALREADY,EWOULDBLOCKundEINPROGRESS.Zusätzlich zu denen von
OSErrorkannBlockingIOErrorein weiteres Attribut besitzen:
- exception ChildProcessError¶
Wird ausgelöst, wenn eine Operation auf einem Kindprozess fehlschlägt. Entspricht der
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 in einen Socket zu schreiben, der für Schreibvorgänge heruntergefahren wurde. Entspricht dererrnoEPIPEundESHUTDOWN.
- exception ConnectionAbortedError¶
Eine Unterklasse von
ConnectionError, die ausgelöst wird, wenn ein Verbindungsversuch von der Gegenstelle abgebrochen wird. Entspricht dererrnoECONNABORTED.
- exception ConnectionRefusedError¶
Eine Unterklasse von
ConnectionError, die ausgelöst wird, wenn ein Verbindungsversuch von der Gegenstelle abgelehnt wird. Entspricht dererrnoECONNREFUSED.
- exception ConnectionResetError¶
Eine Unterklasse von
ConnectionError, die ausgelöst wird, wenn eine Verbindung von der Gegenstelle zurückgesetzt wird. Entspricht dererrnoECONNRESET.
- exception FileExistsError¶
Wird ausgelöst, wenn versucht wird, eine Datei oder ein Verzeichnis zu erstellen, die bzw. das bereits existiert. Entspricht der
errnoEEXIST.
- exception FileNotFoundError¶
Wird ausgelöst, wenn eine Datei oder ein Verzeichnis angefordert wird, aber nicht existiert. Entspricht der
errnoENOENT.
- exception InterruptedError¶
Wird ausgelöst, wenn ein Systemaufruf durch ein eingehendes Signal unterbrochen wird. Entspricht der
errnoEINTR.Geändert in Version 3.5: Python wiederholt Systemaufrufe nun, wenn ein Aufruf durch ein Signal unterbrochen wird, es sei denn, der Signal-Handler löst eine Exception aus (siehe PEP 475 für die Begründung), anstatt
InterruptedErrorauszulösen.
- exception IsADirectoryError¶
Wird ausgelöst, wenn eine Dateioperation (wie
os.remove()) auf ein Verzeichnis angewendet werden soll. Entspricht dererrnoEISDIR.
- exception NotADirectoryError¶
Wird ausgelöst, wenn eine Verzeichnisoperation (wie
os.listdir()) auf etwas angewendet werden soll, das kein Verzeichnis ist. Auf den meisten POSIX-Plattformen kann sie auch ausgelöst werden, wenn eine Operation versucht, eine Datei, die kein Verzeichnis ist, so zu öffnen oder zu durchlaufen, als wäre sie ein Verzeichnis. Entspricht dererrnoENOTDIR.
- exception PermissionError¶
Wird ausgelöst, wenn versucht wird, eine Operation ohne ausreichende Zugriffsrechte auszuführen – beispielsweise Dateisystemberechtigungen. Entspricht der
errnoEACCES,EPERMundENOTCAPABLE.Geändert in Version 3.11.1:
ENOTCAPABLEvon WASI ist nun aufPermissionErrorgemappt.
- exception ProcessLookupError¶
Wird ausgelöst, wenn ein angegebener Prozess nicht existiert. Entspricht der
errnoESRCH.
- exception TimeoutError¶
Wird ausgelöst, wenn eine Systemfunktion auf Systemebene eine Zeitüberschreitung erlitten hat. Entspricht der
errnoETIMEDOUT.
Added in version 3.3: Alle oben genannten OSError-Unterklassen wurden hinzugefügt.
Siehe auch
PEP 3151 – Überarbeitung der OS- und IO-Exception-Hierarchie
Warnungen¶
Die folgenden Exceptions werden als Warnungskategorien verwendet; siehe die Dokumentation zu Warning Categories für weitere Details.
- exception Warning¶
Basisklasse für Warnungskategorien.
- exception UserWarning¶
Basisklasse für von Benutzercode erzeugte Warnungen.
- exception DeprecationWarning¶
Basisklasse für Warnungen über veraltete Features, wenn diese Warnungen für andere Python-Entwickler bestimmt sind.
Wird von den Standard-Warnfiltern ignoriert, außer im
__main__-Modul (PEP 565). Die Aktivierung des Python-Entwicklungsmodus zeigt diese Warnung an.Die Richtlinie für veraltete Funktionen wird in PEP 387 beschrieben.
- exception PendingDeprecationWarning¶
Basisklasse für Warnungen über Funktionen, die obsolet sind und von denen erwartet wird, dass sie in Zukunft als veraltet markiert werden, es derzeit jedoch noch nicht sind.
Diese Klasse wird selten verwendet, da die Ausgabe einer Warnung vor einer möglichen künftigen Veraltung unüblich ist; für bereits aktive Veraltungen wird
DeprecationWarningbevorzugt.Wird von den Standard-Warnfiltern ignoriert. Die Aktivierung des Python-Entwicklungsmodus zeigt diese Warnung an.
Die Richtlinie für veraltete Funktionen wird in PEP 387 beschrieben.
- exception SyntaxWarning¶
Basisklasse für Warnungen bezüglich zweifelhafter Syntax.
Diese Warnung wird typischerweise beim Kompilieren von Python-Quelltext ausgegeben und tritt beim Ausführen von bereits kompiliertem Code üblicherweise nicht auf.
- exception RuntimeWarning¶
Basisklasse für Warnungen bezüglich zweifelhaften Laufzeitverhaltens.
- exception FutureWarning¶
Basisklasse für Warnungen über veraltete Features, wenn diese Warnungen für Endbenutzer von in Python geschriebenen Anwendungen bestimmt sind.
- exception ImportWarning¶
Basisklasse für Warnungen vor wahrscheinlichen Fehlern bei Modulimporten.
Wird von den Standard-Warnfiltern ignoriert. Die Aktivierung des Python-Entwicklungsmodus zeigt diese Warnung an.
- exception UnicodeWarning¶
Basisklasse für Warnungen im Zusammenhang mit Unicode.
- exception EncodingWarning¶
Basisklasse für Warnungen im Zusammenhang mit Kodierungen.
Siehe Opt-in EncodingWarning für Details.
Added in version 3.10.
- exception ResourceWarning¶
Basisklasse für Warnungen im Zusammenhang mit der Ressourcennutzung.
Wird von den Standard-Warnfiltern ignoriert. Die Aktivierung des Python-Entwicklungsmodus zeigt diese Warnung an.
Added in version 3.2.
Exception-Gruppen¶
Die folgenden Klassen werden verwendet, wenn mehrere voneinander unabhängige Exceptions ausgelöst werden müssen. Sie sind Teil der Exception-Hierarchie, sodass sie wie alle anderen Exceptions mit except behandelt werden können. Zudem werden sie von except* erkannt, was ihre Untergruppen anhand der Typen der enthaltenen Exceptions abgleicht.
- exception ExceptionGroup(msg, excs)¶
- exception BaseExceptionGroup(msg, excs)¶
Beide Exception-Typen kapseln die Exceptions in der Sequenz
excs. Der Parametermsgmuss eine Zeichenkette sein. Der Unterschied zwischen den beiden Klassen besteht darin, dassBaseExceptionGroupBaseExceptionerweitert und jede Exception kapseln kann, währendExceptionGroupExceptionerweitert und nur Unterklassen vonExceptionkapseln kann. Dieser Entwurf sorgt dafür, dassexcept ExceptioneineExceptionGroupabfängt, nicht jedochBaseExceptionGroup.Der Konstruktor von
BaseExceptionGroupgibt eineExceptionGroupstatt einerBaseExceptionGroupzurück, wenn alle enthaltenen Exceptions Instanzen vonExceptionsind; er kann daher verwendet werden, um die Auswahl automatisch zu treffen. Der Konstruktor vonExceptionGrouphingegen löst einenTypeErroraus, wenn eine enthaltene Exception keine Unterklasse vonExceptionist.Exception-Gruppen sind hinsichtlich des Typs ihrer enthaltenen Ausnahmen generisch.
Der Parameter
excskann eine beliebige Sequenz sein, wobei Listen und Tupel hier speziell effizienter verarbeitet werden. Für optimale Leistung übergibexcsals Tupel.- message¶
Das Argument
msgan den Konstruktor. Dies ist ein schreibgeschütztes Attribut.
- exceptions¶
Ein Tupel der Exceptions in der Sequenz
excs, die an den Konstruktor übergeben wurde. Dies ist ein schreibgeschütztes Attribut.
- subgroup(condition)¶
Gibt eine Exception-Gruppe zurück, die nur diejenigen Exceptions der aktuellen Gruppe enthält, die auf condition zutreffen, oder
None, wenn das Ergebnis leer ist.Die Bedingung kann ein Exception-Typ oder ein Tupel von Exception-Typen sein; in diesem Fall wird jede Exception anhand derselben Prüfung auf Übereinstimmung getestet, die in einer
except-Klausel verwendet wird. Die Bedingung kann auch ein Aufrufobjekt (außer einem Typobjekt) sein, das eine Exception als einziges Argument akzeptiert und für diejenigen Exceptions True zurückgibt, die in der Untergruppe enthalten sein sollen.Die Verschachtelung der aktuellen Exception bleibt im Ergebnis erhalten, ebenso wie die Werte der Felder
message,__traceback__,__cause__,__context__und__notes__. Leere verschachtelte Gruppen werden im Ergebnis weggelassen.Die Bedingung wird für alle Exceptions in der geschachtelten Exception-Gruppe geprüft, einschließlich der obersten Ebene und aller geschachtelten Exception-Gruppen. Wenn die Bedingung für eine solche Exception-Gruppe wahr ist, wird sie vollständig in das Ergebnis aufgenommen.
Added in version 3.13:
conditionkann jedes aufrufbare Objekt sein, das kein Typobjekt ist.
- split(condition)¶
Wie
subgroup(), gibt jedoch das Paar(match, rest)zurück, wobeimatchsubgroup(condition)entspricht undrestder verbleibende, nicht übereinstimmende Teil ist.
- derive(excs)¶
Gibt eine Exception-Gruppe mit derselben
messagezurück, die jedoch die Exceptions inexcskapselt.Diese Methode wird von
subgroup()undsplit()verwendet, die in verschiedenen Kontexten zum Aufteilen einer Exception-Gruppe dienen. Eine Unterklasse muss diese Methode überschreiben, damitsubgroup()undsplit()Instanzen der Unterklasse anstelle vonExceptionGroupzurückgeben.subgroup()undsplit()kopieren die Felder__traceback__,__cause__,__context__und__notes__von der ursprünglichen Exception-Gruppe in die vonderive()zurückgegebene Gruppe, 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
Beachte, dass
BaseExceptionGroup__new__()definiert; Unterklassen, die eine abweichende Konstruktor-Signatur benötigen, müssen daher diese Methode anstelle von__init__()überschreiben. Das folgende Beispiel definiert etwa eine Exception-Gruppen-Unterklasse, die einen exit_code entgegennimmt und daraus die Nachricht der Gruppe konstruiert: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)
Wie
ExceptionGroupkann jede Unterklasse vonBaseExceptionGroup, die zugleich eine Unterklasse vonExceptionist, nur Instanzen vonExceptionkapseln.Added in version 3.11.
Exception-Hierarchie¶
Die Klassenhierarchie für eingebaute Exceptions 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