Lektion 14 von 35Python
Python · Lektion 14 · 25 Minuten
Fehler abfangen mit try
Das lernst du
- Verstehen, wann Programme abstürzen
- Fehler mit
tryundexceptabfangen - Verschiedene Fehlerarten unterschiedlich behandeln
Wenn Programme abstürzen
Bisher war jeder Fehler das Ende deines Programms. Probier es aus und gib statt einer Zahl ein Wort ein:
alter = int(input("Wie alt bist du? "))
print(f"In 10 Jahren bist du {alter + 10}.")Python bricht mit einem ValueError ab, weil sich „hallo“ nicht in eine Zahl umwandeln lässt. In einem echten Programm (oder auf einem Roboter!) soll das nicht passieren.
try und except
Mit try sagst du: „Versuch das mal.“ Geht dabei etwas schief, springt Python in den except-Teil, statt abzustürzen:
try:
alter = int(input("Wie alt bist du? "))
print(f"In 10 Jahren bist du {alter + 10}.")
except ValueError:
print("Das war leider keine Zahl.")
print("Das Programm läuft weiter!")Hinter except schreibst du, welchen Fehler du abfangen willst. Die Namen kennst du schon aus den Fehlermeldungen.
Mehrere Fehlerarten
Verschiedene Fehler kannst du unterschiedlich behandeln, indem du mehrere except-Blöcke untereinander schreibst:
zahlen = [10, 20, 30]
try:
position = int(input("Welche Position (0–2)? "))
print(f"Dort steht {zahlen[position]}.")
except ValueError:
print("Bitte eine Zahl eingeben.")
except IndexError:
print("Diese Position gibt es nicht.")| Fehler | Wann er passiert |
|---|---|
ValueError | int("abc") – Wert passt nicht |
ZeroDivisionError | 5 / 0 |
IndexError | Position in der Liste gibt es nicht |
KeyError | Schlüssel im Dictionary gibt es nicht |
So lange fragen, bis es passt
Mit while True und break fragst du immer wieder, bis eine gültige Eingabe kommt. break beendet die Schleife sofort:
while True:
try:
zahl = int(input("Zahl zwischen 1 und 10: "))
if 1 <= zahl <= 10:
break
print("Nicht zwischen 1 und 10.")
except ValueError:
print("Das ist keine Zahl.")
print(f"Danke, du hast {zahl} gewählt.")Achtung: Schreib nie einfach nur
except:ohne Fehlernamen. Dann fängst du auch Fehler ab, die du gar nicht erwartet hast – und findest Tippfehler im Code nicht mehr.
Kurz-Check
Bevor es an die Aufgabe geht: Was gibt dieses Programm aus? Tipp deine Vermutung ein – Python rechnet danach nach.
try:
zahl = int("12a")
print("klappt")
except ValueError:
print("keine Zahl")
print("weiter")Deine Aufgabe
Jetzt bist du dran
Schreib einen Taschenrechner, der zwei Zahlen teilt und nie abstürzt. Frag mit input() nach zwei Zahlen. Gib Ergebnis: 2.5 aus (bei 10 und 4). Ist eine Eingabe keine Zahl, gib Bitte nur Zahlen eingeben. aus. Ist die zweite Zahl 0, gib Durch 0 geht nicht. aus. Benutze float() statt int(), damit auch Kommazahlen wie 2.5 gehen.
# Dein abstürzsicherer Taschenrechner:
a = float(input("Erste Zahl: "))
b = float(input("Zweite Zahl: "))
print(f"Ergebnis: {a / b}")- Denkanstoß
Fang den
ZeroDivisionErrormitexceptZeroDivisionErrorab. - Welcher Befehl hilft?
float("zehn")löst einenValueErroraus. Fang ihn mitexceptValueErrorab.Beide
input()-Zeilen müssen imtry-Block stehen. - Lückencode – ergänze die ___
try: a = float(input("Erste Zahl: ")) b = float(input("Zweite Zahl: ")) print(f"Ergebnis: {a / b}") except ValueError: print(___) except ZeroDivisionError: print(___)
Ohne Hinweise gelöst gibt es einen ⭐ auf deiner Fortschrittsseite.
Lösung anzeigen🔒 Erst nach allen Hinweisen oder 2 Prüf-Versuchen
Versuch es erst selbst – aus Fehlern lernt man am meisten. Hier ist eine mögliche Lösung:
try:
a = float(input("Erste Zahl: "))
b = float(input("Zweite Zahl: "))
print(f"Ergebnis: {a / b}")
except ValueError:
print("Bitte nur Zahlen eingeben.")
except ZeroDivisionError:
print("Durch 0 geht nicht.")