Zum Inhalt springen
BetaEN
Lektion 14 von 35Python

Python · Lektion 14 · 25 Minuten

Fehler abfangen mit try

Das lernst du

  • Verstehen, wann Programme abstürzen
  • Fehler mit try und except abfangen
  • 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.")
FehlerWann er passiert
ValueErrorint("abc") – Wert passt nicht
ZeroDivisionError5 / 0
IndexErrorPosition in der Liste gibt es nicht
KeyErrorSchlü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}")

Ohne Hinweise gelöst gibt es einen ⭐ auf deiner Fortschrittsseite.

Lösung anzeigen

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.")
Mehr üben im TrainingsraumEndlos neue Aufgaben zu diesem Thema – mit XP und Serien.