Fehlerbehandlung in Python mit try, except und finally
Der Umgang mit Fehlern ist ein wesentlicher Bestandteil der Entwicklung von qualitativ hochwertiger und zuverlässiger Software. Selbst die erfahrensten Entwickler sind nicht vor Laufzeitfehlern gefeit. Damit solche Situationen nicht zum vollständigen Absturz der Anwendung führen, bietet Python leistungsstarke Werkzeuge zur Ausnahmebehandlung.
In diesem Leitfaden lernst du die korrekte Verwendung der Blöcke try, except und finally, um fehlertoleranten Code zu schreiben.
Grundlagen der Ausnahmebehandlung in Python
Was ist Fehlerbehandlung?
Die Fehlerbehandlung in Python ermöglicht es, Ausnahmen (Exceptions) abzufangen, die während der Programmausführung auftreten. Anstatt dass die Anwendung abstürzt, führt das System bestimmte Aktionen aus, um die Problemsituation korrekt zu behandeln.
Die Schlüsselelemente des Ausnahmebehandlungssystems
Das Fehlerbehandlungssystem in Python basiert auf drei Hauptblöcken:
- try — der Codeblock, in dem eine Ausnahme auftreten könnte
- except — der Block zur Behandlung eines bestimmten Fehlertyps
- finally — der Codeblock, der unabhängig vom Ergebnis immer ausgeführt wird
Grundstruktur der try-except-finally-Konstruktion
Syntax der Hauptkonstruktion
try:
# Code, der eine Ausnahme auslösen könnte
pass
except SpecificError:
# Code zur Behandlung des spezifischen Fehlers
pass
finally:
# Code, der in jedem Fall ausgeführt wird
pass
Praktische Anwendung der Grundstruktur
try:
user_input = input("Gib eine Zahl ein: ")
number = int(user_input)
print(f"Du hast die Zahl eingegeben: {number}")
except ValueError:
print("Fehler: Bitte gib eine gültige Zahl ein")
finally:
print("Vorgang abgeschlossen")
Bei korrekter Eingabe gibt das Programm die eingegebene Zahl aus. Bei ungültiger Eingabe wird eine Fehlermeldung angezeigt. Der finally-Block wird in jedem Fall ausgeführt.
Verschiedene Arten von Ausnahmen behandeln
Mehrere Fehler abfangen
Python erlaubt es, verschiedene Ausnahmetypen mit mehreren except-Blöcken zu behandeln:
try:
dividend = 10
divisor = 0
result = dividend / divisor
except ZeroDivisionError:
print("Eine Division durch Null ist nicht erlaubt")
except ValueError:
print("Ungültiges Datenformat erkannt")
except TypeError:
print("Inkompatible Datentypen für diese Operation")
finally:
print("Verarbeitung der mathematischen Operation abgeschlossen")
Fehlerbehandlung ohne finally-Block
Der finally-Block ist optional. Fehlt er, wird die Ausnahme behandelt und das Programm läuft weiter:
try:
data_list = [1, 2, 3, 4, 5]
element = data_list[10] # Versuch, auf einen nicht existierenden Index zuzugreifen
except IndexError:
print("Zugriff auf einen Index außerhalb der Liste")
Detaillierte Informationen zu Ausnahmen abrufen
Verwendung des Schlüsselworts as
Um detaillierte Informationen über eine Ausnahme zu erhalten, wird die Konstruktion mit dem Schlüsselwort as verwendet:
try:
calculation = 15 / 0
except ZeroDivisionError as error:
print(f"Fehler gefunden: {error}")
print(f"Fehlertyp: {type(error).__name__}")
Ergebnis der Ausführung:
Fehler gefunden: division by zero
Fehlertyp: ZeroDivisionError
Universelle Behandlung aller Ausnahmen
In manchen Fällen ist es nötig, alle möglichen Ausnahmen abzufangen:
try:
potentially_risky_operation()
except Exception as error:
print(f"Ein Fehler ist aufgetreten: {error}")