Python - Der try-except-Block

Hallo, zukünftige Python-Meister! Ich freue mich, euch durch die wunderbare Welt der Fehlerbehandlung in Python zu führen. Als euer freundlicher Nachbar und Informatiklehrer habe ich unzählige Studenten sehen, die über Fehler gestolpert sind, aber keine Angst! Am Ende dieses Tutorials werdet ihr Ausnahmen wie ein Profi behandeln. Los geht's!

Python - try-except Block

Python Try-Except-Block

Stell euch vor, ihr kocht ein neues Rezept. Ihr seid nicht sicher, ob ihr alle Zutaten habt, aber ihr wollt es trotzdem ausprobieren. Genau das macht der try-except-Block in Python - er lässt euch einige Code ausführen und behandelt mögliche Fehler sanft.

Hier ist die grundlegende Struktur:

try:
# Code, der eine Ausnahme verursachen könnte
except:
# Code, um die Ausnahme zu behandeln

Schauen wir uns ein einfaches Beispiel an:

try:
number = int(input("Gib eine Zahl ein: "))
result = 10 / number
print(f"10 geteilt durch {number} ist {result}")
except:
print("Hoppla! Etwas ist schiefgelaufen.")

In diesem Code:

  1. Wir bitten den Benutzer, eine Zahl einzugeben.
  2. Wir versuchen, 10 durch diese Zahl zu teilen.
  3. Wenn etwas schief geht (wie das Eingeben von Null oder einem nicht-numerischen Wert), fangen wir den Fehler ab und geben eine freundliche Nachricht aus.

Versucht, diesen Code mit verschiedenen Eingaben auszuführen. Gebt 2, dann 0, dann "Banane" ein. Seht, wie er jeden Fall unterschiedlich behandelt?

Behandlung mehrerer Ausnahmen

Nun werden wir spezifischer. Verschiedene Arten von Fehlern können auftreten, und wir möchten sie vielleicht unterschiedlich behandeln. Es ist wie verschiedene Erste-Hilfe-Koffer für verschiedene Verletzungen zu haben.

try:
number = int(input("Gib eine Zahl ein: "))
result = 10 / number
print(f"10 geteilt durch {number} ist {result}")
except ValueError:
print("Das ist keine gültige Zahl!")
except ZeroDivisionError:
print("Du kannst nicht durch null teilen!")
except:
print("Etwas anderes ist schiefgelaufen.")

Hier behandeln wir drei Szenarien:

  1. Wenn der Benutzer etwas eingibt, das keine Zahl ist (ValueError)
  2. Wenn der Benutzer null eingibt (ZeroDivisionError)
  3. Alle anderen unerwarteten Fehler

Führt diesen Code mit Eingaben wie "fünf", 0, 2 aus und seht, wie er unterschiedlich reagiert!

Verwendung der Else-Klausel mit dem Try-Except-Block

Manchmal möchten wir einige Code nur ausführen, wenn keine Ausnahmen aufgetreten sind. Hier kommt die else-Klausel ins Spiel. Denkt daran, als Belohnung, wenn alles glatt läuft!

try:
number = int(input("Gib eine positive Zahl ein: "))
if number <= 0:
raise ValueError("Das ist keine positive Zahl!")
result = 10 / number
except ValueError as ve:
print(f"Fehler: {ve}")
except ZeroDivisionError:
print("Du kannst nicht durch null teilen!")
else:
print(f"10 geteilt durch {number} ist {result}")
print("Danke, dass du eine gültige Zahl eingegeben hast!")

In diesem Beispiel:

  1. Wir überprüfen, ob die Zahl positiv ist.
  2. Wenn nicht, werfen wir unseren eigenen ValueError.
  3. Wenn keine Ausnahmen auftreten, wird der else-Block ausgeführt und gibt eine nette Nachricht aus.

Die Finally-Klausel

Letztes aber nicht minder wichtig, die finally-Klausel. Dieser Codeblock wird immer ausgeführt - unabhängig davon, ob eine Ausnahme aufgetreten ist oder nicht. Es ist wie das Aufräumen nach dem Kochen, unabhängig davon, ob das Rezept ein Erfolg oder ein Desaster war.

try:
file = open("wichtige_daten.txt", "r")
content = file.read()
result = 10 / int(content)
except FileNotFoundError:
print("Die Datei existiert nicht!")
except ValueError:
print("Die Datei enthält keine gültige Zahl!")
except ZeroDivisionError:
print("Die Zahl in der Datei ist null!")
else:
print(f"Das Ergebnis ist: {result}")
finally:
print("Schließe die Datei...")
file.close()

In diesem Beispiel:

  1. Wir versuchen, eine Datei zu öffnen und eine Zahl daraus zu lesen.
  2. Wir behandeln verschiedene mögliche Fehler.
  3. Wenn erfolgreich, geben wir das Ergebnis aus.
  4. Unabhängig von dem, was passiert, stellen wir sicher, dass die Datei im finally-Block geschlossen wird.

Zusammenfassung der Methoden zur Fehlerbehandlung

Hier ist eine praktische Tabelle, die die Methoden zur Fehlerbehandlung zusammenfasst, die wir gelernt haben:

Methode Beschreibung Verwendungszweck
try Umschließt Code, der eine Ausnahme verursachen könnte Wird immer mit except, else oder finally verwendet
except Behandelt spezifische Ausnahmen Fangen und Behandeln von Fehlern
else Wird ausgeführt, wenn keine Ausnahmen im try-Block auftreten Ausführen von Code, der nur ausgeführt werden soll, wenn try erfolgreich ist
finally Wird immer ausgeführt, unabhängig von Ausnahmen Aufräumarbeiten (z.B. Schließen von Dateien)
raise Löst manuell eine Ausnahme aus Erstellen von benutzerdefinierten Fehlerbedingungen

Denkt daran, eine gute Fehlerbehandlung ist wie das Tragen eines Sicherheitsgurtes - es mag überflüssig erscheinen, bis ihr es wirklich braucht! Übt diese Konzepte und bald werdet ihr robusten, fehlerresistenten Python-Code wie ein Profi schreiben.

Happy coding, und möge eure Ausnahmen immer graceful behandelt werden!

Credits: Image by storyset