Lektion 9: Fehler & Debugging

Fehler gehören zum Programmieren wie Kabel zum Serverraum. Der Unterschied zwischen Anfängern und Profis ist nicht, dass Profis keine Fehler machen, sondern dass sie Fehlermeldungen lesen können. Führ das hier aus und schau dir die Meldung genau an:

Python-Editor

Python sagt dir drei Dinge: die Zeile, in der es knallte, die Fehlerart (NameError) und eine Beschreibung ("zhal is not defined", oft sogar mit Korrekturvorschlag). Immer von unten nach oben lesen! Die häufigsten Fehlerarten:

SyntaxError: Tippfehler in der Sprache selbst, z. B. fehlender Doppelpunkt. NameError: Variable falsch geschrieben oder nie angelegt. TypeError: Typen passen nicht zusammen, der Klassiker "String + Zahl" aus Lektion 2. ValueError: richtiger Typ, unsinniger Wert, z. B. int("abc"). IndexError: Zugriff auf ein Listenelement, das es nicht gibt.

Übung 9.1: Im Code unten stecken DREI Fehler. Führ ihn aus, lies die Meldung, behebe den ersten Fehler, führ erneut aus, und so weiter, bis alles läuft.

Python-Editor
Musterlösung anzeigen
namen = ["Alex", "Sam", "Kim"]

print("Erster Name: " + namen[0])      # Klammer fehlte (SyntaxError)
print("Letzter Name: " + namen[2])     # Index 3 gibt es nicht (IndexError)
print("Anzahl: " + str(len(namen)))    # Zahl erst zu String machen (TypeError)

Fehler abfangen mit try/except

Manche Fehler kannst du nicht verhindern, etwa wenn ein Nutzer "abc" eintippt, wo eine Zahl erwartet wird. Mit try/except stürzt dein Programm dann nicht ab, sondern reagiert kontrolliert:

Python-Editor

Debugging-Trick Nummer 1: Wenn dein Programm Unsinn macht, aber nicht abstürzt, streu print()-Zeilen ein und gib Zwischenwerte aus ("Was steht WIRKLICH in der Variable?"). Das klingt banal, findet aber 90 Prozent aller Logikfehler. Genau so haben wir übrigens auch echte Fehler in der Lernarena-App gefunden.

Übung 9.2: Baue eine absturzsichere Altersabfrage: Frag so lange nach dem Alter, bis eine gültige Zahl kommt. Kombiniere dafür die while-Schleife aus Lektion 5 mit try/except.

Python-Editor
Musterlösung anzeigen
while True:
    eingabe = input("Wie alt bist du? ")
    try:
        alter = int(eingabe)
        break
    except ValueError:
        print("Bitte eine Zahl eingeben!")

print(f"Alles klar, du bist {alter}.")