
Python 3 definiert 63 integrierte Ausnahmen

Python Exception Hierarchy
- BaseException
- Exception
- TypeError
- StopAsyncIteration
- StopIteration
- ImportError
- ModuleNotFoundError
- ZipImportError
- OSError
- ConnectionError
- BrokenPipeError
- ConnectionAbortedError
- ConnectionRefusedError
- ConnectionResetError
- BlockingIOError
- ChildProcessError
- FileExistsError
- FileNotFoundError
- IsADirectoryError
- NotADirectoryError
- InterruptedError
- PermissionError
- ProcessLookupError
- TimeoutError
- UnsupportedOperation
- herror
- gaierror
- timeout
- Error
- SameFileError
- SpecialFileError
- ExecError
- ReadError
- ConnectionError
- EOFError
- RuntimeError
- RecursionError
- NotImplementedError
- _DeadlockError
- BrokenBarrierError
- NameError
- UnboundLocalError
- AttributeError
- SyntaxError
- IndentationError
- TabError
- IndentationError
- LookupError
- IndexError
- KeyError
- CodecRegistryError
- ValueError
- UnicodeError
- UnicodeEncodeError
- UnicodeDecodeError
- UnicodeTranslateError
- UnsupportedOperation
- UnicodeError
- AssertionError
- ArithmeticError
- FloatingPointError
- OverflowError
- ZeroDivisionError
- SystemError
- CodecRegistryError
- ReferenceError
- BufferError
- MemoryError
- Warning
- UserWarning
- DeprecationWarning
- PendingDeprecationWarning
- SyntaxWarning
- RuntimeWarning
- FutureWarning
- ImportWarning
- UnicodeWarning
- BytesWarning
- ResourceWarning
- GeneratorExit
- SystemExit
- KeyboardInterrupt
- Exception
Sie können allgemeinere Ausnahmen verwenden, die auch die darunterliegenden Ausnahmen abdecken. Das bedeutet, dass beispielsweise, wenn Sie Exception anstelle von ZeroDivisionError verwenden und der Code im Try-Block mit 0 geteilt wird, die allgemeinere Ausnahme ausgelöst wird.
Python stoppt und „wirft“ bei der ersten Ausnahme, die in der Reihenfolge auftritt, in der sie definiert sind.
Die Reihenfolge der Ausnahmen ist wichtig.
Einzelfehlerbehandlung
import logging
logging.basicConfig(level=logging.INFO)
def process_item(data, idx):
"""
Example operations that can raise:
- KeyError when missing dict key
- IndexError when idx out of range
- ValueError when int conversion fails
"""
try:
# 1) get value from dict (may raise KeyError)
raw = data["value"]
# 2) convert to int (may raise ValueError)
val = int(raw)
# 3) access list element (may raise IndexError)
result = val / data["divisors"][idx] # may raise KeyError or IndexError or ZeroDivisionError
except KeyError as e:
logging.warning("Missing required key: %s", e)
# handle or provide a fallback
return None
except IndexError as e:
logging.warning("Index out of range: %s", e)
return None
except ValueError as e:
logging.warning("Invalid numeric value: %s", e)
return None
except ZeroDivisionError as e:
logging.warning("Division by zero: %s", e)
return None
except Exception as e:
# catch-all for unexpected exceptions — log and re-raise to avoid hiding bugs
logging.exception("Unexpected error in process_item")
raise
else:
# executed if no exception occurred
logging.info("Processed successfully: %s", result)
return result
finally:
# cleanup code that always runs (if needed)
logging.debug("process_item finished")
mehrere Fehler zusammenpacken
import logging
logging.basicConfig(level=logging.INFO)
def process_item_grouped(data, idx):
try:
raw = data["value"]
val = int(raw)
result = val / data["divisors"][idx]
except (KeyError, IndexError) as e:
# grouped handling for "lookup / missing" type errors
logging.warning("Lookup error (missing key or bad index): %s", e)
return None
except ValueError as e:
logging.warning("Invalid numeric value: %s", e)
return None
except ZeroDivisionError as e:
logging.warning("Division by zero: %s", e)
return None
except Exception as e:
logging.exception("Unexpected error in process_item_grouped")
raise
else:
logging.info("Processed successfully: %s", result)
return result
Kurze Best-Practice-Checkliste
- Fangen Sie spezifische Ausnahmen ab, nicht Exception/BaseException (außer beim Loggen oder erneuten Auslösen).
- Vermeiden Sie ein einfaches except: – es fängt KeyboardInterrupt und SystemExit ab.
- Verwenden Sie except (A, B) als e:, um verwandte Ausnahmen zu gruppieren.
- Protokollieren Sie Ausnahmen (logging.exception(), wenn Sie den Traceback wünschen).
- Lösen Sie unerwartete Ausnahmen erneut aus, anstatt sie stillschweigend zu ignorieren.
- Bevorzugen Sie Kontextmanager (mit open(…)) für die Ressourcenbereinigung; verwenden Sie finally für andere Bereinigungen.
Die 13 häufigsten Exceptions in Python mit kurzer Beschreibung
SyntaxError
Fehler beim Parsen/bei der Syntax — der Interpreter versteht den Code nicht.
Beispiel: if x == 1 print(x)
→ SyntaxError
Tipp: fehlende Doppelpunkte, Klammern oder falsche Einrückung prüfen.
NameError
Zugriff auf eine nicht definierte Variable oder Funktion.
Beispiel: print(foo)
wenn foo
nie definiert wurde → NameError
Tipp: Variablennamen/Schreibweisen prüfen.
TypeError
Operation auf inkompatiblen Typen (z. B. Addition von Zahl und String).
Beispiel: 3 + "a"
→ TypeError
Tipp: Typen explizit konvertieren oder Typchecks einbauen.
ValueError
Der Typ stimmt, aber der Wert ist ungültig (z. B. fehlerhafte Konvertierung).
Beispiel: int("abc")
→ ValueError
Tipp: Eingaben validieren oder try/except
verwenden.
IndexError
Zugriff auf einen Listen-/Tuple-Index außerhalb des gültigen Bereichs.
Beispiel: lst = [1]; lst[1]
→ IndexError
Tipp: Längen prüfen (len()
), negative Indizes beachten.
KeyError
Zugriff auf einen nicht vorhandenen Schlüssel in einem Dictionary.
Beispiel: d = {}; d['x']
→ KeyError
Tipp: d.get('x')
oder if 'x' in d:
verwenden.
AttributeError
Zugriff auf ein Attribut oder eine Methode, die das Objekt nicht hat.
Beispiel: None.strip()
→ AttributeError
Tipp: Objekt-Typ prüfen oder hasattr()
nutzen.
ZeroDivisionError
Division oder Modulo durch Null.
Beispiel: 1 / 0
→ ZeroDivisionError
Tipp: Divisor vorher auf 0
prüfen.
FileNotFoundError
Versuch, eine Datei zu öffnen, die nicht existiert.
Beispiel: open("nichtda.txt")
→ FileNotFoundError
Tipp: Pfad prüfen oder try/except
und klare Fehlermeldung.
ImportError / ModuleNotFoundError
Fehler beim Importieren eines Moduls; ModuleNotFoundError
ist eine häufige Unterklasse.
Beispiel: import does_not_exist
→ ModuleNotFoundError
Tipp: Paketnamen prüfen, Umgebung/venv kontrollieren, pip install
falls nötig.
OSError
Allgemeine System-/I/O-Fehler (Dateisystem, Betriebssystem-Aufrufe). Viele Datei- und Netzwerkfehler sind Unterklassen davon.
Beispiel: Probleme beim Öffnen/Lesen/Schreiben von Dateien oder Netzwerk-I/O.
Tipp: genaue Unterklasse (FileNotFoundError
, PermissionError
) catchen, wenn möglich.
PermissionError
Keine Zugriffsrechte für eine Datei/Operation (Unterklasse von OSError
).
Beispiel: open("/root/secret.txt", "r")
ohne Rechte → PermissionError
Tipp: Dateiberechtigungen prüfen oder Berechtigungen anpassen.
RecursionError
Maximale Rekursionstiefe überschritten (zu tiefe rekursive Aufrufe).
Beispiel: unendliche Rekursion in einer Funktion → RecursionError
Tipp: Rekursive Algorithmen in Iterationen umwandeln oder Rekursionstiefe begrenzen.
Raise keyword
raise löst (wirft) eine Ausnahme aus — du signalisierst damit, dass etwas schiefgelaufen ist und die normale Programmausführung unterbrochen werden soll. Das kann eine eingebaute Exception sein oder eine von dir definierte.
eine eingebaute Exception werfen
def set_age(age):
if age < 0:
raise ValueError(„Alter darf nicht negativ sein“)
return age
print(set_age(25)) # 25
print(set_age(-3)) # ValueError: Alter darf nicht negativ sein
Eigene Exception definieren und werfen
class InvalidAgeError(Exception):
„““Eigene Ausnahme für ungültiges Alter“““
pass
def set_age(age):
if age < 0:
raise InvalidAgeError(f“Ungültiges Alter: {age}“)
return age
assert expression : AssertionError
Es gibt AssertionError zurück, wenn der Ausdruck als „None“ ausgewertet wird, andernfalls geschieht nichts.