Python-Fehler & eingebaute Exceptions meistern
Python-Fehler und eingebaute Exceptions
Entdecken Sie, wie Python Probleme signalisiert, den Unterschied zwischen Syntax- und Laufzeitfehlern und wie Sie eingebaute Exceptions sicher handhaben.
Video: Python Exception Handling
Wenn Sie ein Python-Programm ausführen, stoppt der Interpreter die Ausführung sofort, wenn er auf einen unbehandelten Fehler stößt. Diese Fehler fallen in zwei große Kategorien:
- Syntaxfehler – Probleme, die während des Parsens erkannt werden.
- Logische Fehler (Exceptions) – Probleme, die während der Codeausführung auftreten.
Python-Syntaxfehler
Ein Syntaxfehler tritt auf, wenn der Quellcode gegen Pythons Grammatikregeln verstößt. Der Interpreter weist mit einem Caret (^) in der Fehlermeldung auf die genaue Stelle hin.
> >>> if a < 3
File "<interactive input>", line 1
if a < 3
^
SyntaxError: invalid syntax
In diesem Beispiel löst der fehlende Doppelpunkt (:) nach der if-Anweisung einen SyntaxError aus.
Python-logische Fehler (Exceptions)
Logische Fehler, oder Exceptions, treten erst auf, nachdem der Code den Syntax-Check bestanden hat. Häufige Beispiele sind:
- Division durch Null (
ZeroDivisionError) - Öffnen einer nicht existierenden Datei (
FileNotFoundError) - Importieren eines nicht verfügbaren Moduls (
ImportError)
Wenn eine Exception ausgelöst wird, erstellt Python ein Exception-Objekt. Bleibt es unbehandelt, wird ein Traceback ausgegeben, der den Call Stack und den Grund für den Fehler anzeigt.
> >>> 1 / 0
Traceback (most recent call last):
File "<string>", line 301, in runcode
File "<interactive input>", line 1, in <module>
ZeroDivisionError: division by zero
> >>> open("imaginary.txt")
Traceback (most recent call last):
File "<string>", line 301, in runcode
File "<interactive input>", line 1, in <module>
FileNotFoundError: [Errno 2] No such file or directory: 'imaginary.txt'
Python eingebaute Exceptions
Pythons Interpreter löst eine Vielzahl eingebauter Exceptions aus, um verschiedene Fehlerbedingungen zu signalisieren. Sie können sie mit folgendem Snippet auflisten:
print(dir(locals()['__builtins__']))
Nachfolgend eine kompakte Referenz für einige der häufigsten eingebauten Exceptions und die Situationen, die sie auslösen:
| Exception | Fehlerursache |
|---|---|
AssertionError | Wird ausgelöst, wenn eine assert-Anweisung fehlschlägt. |
AttributeError | Wird ausgelöst, wenn eine Attributzuweisung oder -referenz fehlschlägt. |
EOFError | Wird ausgelöst, wenn die input()-Funktion eine End-of-File-Bedingung trifft. |
FloatingPointError | Wird ausgelöst, wenn eine Gleitkomma-Operation fehlschlägt. |
GeneratorExit | Wird ausgelöst, wenn die close()-Methode eines Generators aufgerufen wird. |
ImportError | Wird ausgelöst, wenn das importierte Modul nicht gefunden werden kann. |
IndexError | Wird ausgelöst, wenn ein Sequenzindex außerhalb des Bereichs liegt. |
KeyError | Wird ausgelöst, wenn ein Schlüssel in einem Dictionary fehlt. |
KeyboardInterrupt | Wird ausgelöst, wenn der Benutzer Strg+C oder Entf drückt. |
MemoryError | Wird ausgelöst, wenn eine Operation den verfügbaren Speicher überschreitet. |
NameError | Wird ausgelöst, wenn eine Variable im lokalen oder globalen Scope nicht gefunden wird. |
NotImplementedError | Wird von abstrakten Methoden ausgelöst, die keine Implementierung haben. |
OSError | Wird für systembezogene Fehler ausgelöst (z. B. Datei-I/O). |
OverflowError | Wird ausgelöst, wenn ein arithmetisches Ergebnis zu groß für die Darstellung ist. |
ReferenceError | Wird ausgelöst, wenn ein schwacher Referenz-Proxy ein garbage-collected Objekt referenziert. |
RuntimeError | Wird für Fehler ausgelöst, die in keine andere Kategorie passen. |
StopIteration | Wird von next() ausgelöst, wenn ein Iterator erschöpft ist. |
SyntaxError | Wird ausgelöst, wenn der Parser ungültige Syntax erkennt. |
IndentationError | Wird ausgelöst, wenn die Einrückung inkorrekt ist. |
TabError | Wird ausgelöst, wenn Einrückung Tabs und Spaces inkonsistent mischt. |
SystemError | Wird ausgelöst, wenn der Interpreter einen internen Fehler erkennt. |
SystemExit | Wird durch sys.exit() ausgelöst. |
TypeError | Wird ausgelöst, wenn eine Operation oder Funktion ein Objekt unangemessenen Typs erhält. |
UnboundLocalError | Wird ausgelöst, wenn eine lokale Variable vor der Zuweisung referenziert wird. |
UnicodeError | Wird für Unicode-bezogene Encoding- oder Decoding-Fehler ausgelöst. |
UnicodeEncodeError | Wird bei Unicode-Encoding-Fehlern ausgelöst. |
UnicodeDecodeError | Wird bei Unicode-Decoding-Fehlern ausgelöst. |
UnicodeTranslateError | Wird bei Unicode-Übersetzungsfehlern ausgelöst. |
ValueError | Wird ausgelöst, wenn eine Funktion ein Argument korrekten Typs, aber unangemessenen Werts erhält. |
ZeroDivisionError | Wird ausgelöst, bei Division oder Modulo durch Null. |
Wenn Sie granulare Kontrolle benötigen, erlaubt Python die Definition benutzerdefinierter Exception-Klassen. Siehe Python benutzerdefinierte Exceptions für Details.
Die Behandlung von Exceptions ist unkompliziert mit try, except und finally Blöcken. Für einen tieferen Einstieg siehe Python try, except und finally Anweisungen.
Python
- Python-Schlüsselwörter & Bezeichner: Reservierte Wörter & Benennungskonventionen meistern
- Python-Anweisungen, Einrückung & Kommentare: Klare Anleitung
- Python-Variablen, Konstanten & Literale – Umfassender Leitfaden
- Python-Typkonvertierung & Casting meistern: Umfassender Leitfaden
- Python I/O & Modul-Importe meistern: Praxisleitfaden
- Python Global, Local & Nonlocal Variablen verstehen
- Zahlen, Typkonvertierung und Mathematik in Python meistern
- Verzeichnis- und Dateioperationen in Python meistern
- Python benutzerdefinierte Exceptions: Ein praktischer Leitfaden
- Aktuelles Datum und Uhrzeit in Python abrufen: Praktischer Leitfaden