Teil 11: Fehler erkennen und vermeiden – mit try und except

🎯 Ziel dieses Teils

  • Du verstehst, was ein Fehler im Programm ist
  • Du lernst, wie du Fehler abfängst, ohne dass dein Programm abstürzt
  • Du setzt try/except gezielt in deinem Projekt ein

Was ist ein „Fehler“ in Python?

Ein Fehler (englisch: Exception) passiert, wenn du dem Computer etwas gibst, was er nicht versteht oder nicht verarbeiten kann.

Beispiele:

int("Hallo")

Das führt zu:

ValueError: invalid literal for int() with base 10: 'Hallo'

Oder:

liste = []
print(liste[0])

Führt zu:

IndexError: list index out of range

💥 Und dein Programm stürzt ab.


Lösung: try und except

Damit kannst du sagen:

„Versuch das mal.
Und wenn’s schiefgeht – fang den Fehler ab und gib eine freundliche Nachricht aus.“

Beispiel:

try:
    zahl = int(input("Gib eine Zahl ein: "))
except ValueError:
    print("⚠️ Das war keine gültige Zahl!")

Anwendung im To-Do-Projekt

Wir schauen uns 3 typische Stellen an:


1. Eingabe: Text statt Zahl

Vorher:

eingabe = input("Welche Nummer ist erledigt? ")
nummer = int(eingabe)  # kann abstürzen!

Jetzt:

try:
    nummer = int(input("Welche Nummer ist erledigt? "))
except ValueError:
    print("⚠️ Bitte gib eine gültige Zahl ein.")
    return None

2. Zugriff auf ungültige Position in der Liste

Vorher:

erledigt = aufgaben.pop(nummer)

Jetzt:

try:
    erledigt = aufgaben.pop(nummer)
except IndexError:
    print("⚠️ Diese Nummer gibt es nicht.")
    return None

3. Datei öffnen (machen wir schon seit Teil 7)

try:
    with open("aufgaben.txt", "r") as datei:
        ...
except FileNotFoundError:
    aufgaben = []

Beispiel-Funktion mit try/except

def loesche_aufgabe():
    if not aufgaben:
        print("⚠️ Keine Aufgaben.")
        return None

    try:
        nummer = int(input("Welche Nummer ist erledigt? ")) - 1
        erledigt = aufgaben.pop(nummer)
        return erledigt
    except ValueError:
        print("⚠️ Das war keine Zahl.")
    except IndexError:
        print("⚠️ Diese Nummer gibt es nicht.")

    return None

Ziel erreicht: Freundlich statt abstürzen

Egal was der Benutzer eintippt – dein Programm bleibt stabil.


Zusammenfassung

BefehlBedeutung
try:Versuch diesen Block
except Errorname:Falls ein bestimmter Fehler passiert
except:(Optional) Fang alle Fehler ab
return NoneKein Ergebnis zurückgeben – funktioniert trotzdem

Bonus: Fehler-Infos anzeigen

Wenn du sehen willst, was genau schiefging, kannst du das Fehlerobjekt anzeigen:

except ValueError as fehler:
    print("Fehler:", fehler)

Oder für alles:

except Exception as fehler:
    print("Etwas ist schiefgelaufen:", fehler)

🎉 Glückwunsch!

Du hast jetzt gelernt, wie du:

✅ Fehler vermeidest, bevor sie passieren
✅ Fehler abfängst, wenn sie doch passieren
✅ Dein Programm robust und benutzerfreundlich machst

Das ist ein riesiger Schritt in Richtung „echte Software“!


Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert