Python für Anfänger · Teil 13TutorialEinsteiger

Python

Python für Anfänger – Teil 13: Fehler verstehen und Eingaben absichern

Lies Fehlermeldungen, fange erwartbare Eingabefehler gezielt ab und untersuche Programme schrittweise.

Veröffentlicht am

3 Minuten Lesezeit

Voraussetzungen

Du kennst die Inhalte aus Teil 12 und arbeitest mit einem lokalen Python-3-Interpreter (ab Python 3.10), beispielsweise in Thonny.

Das lernst du in dieser Lektion

  • Syntax-, Laufzeit- und Logikfehler unterscheiden.
  • ValueError gezielt abfangen.
  • Mit dem Debugger Werte verfolgen.

Drei verschiedene Fehlerarten

Ein SyntaxError verhindert, dass Python den Code korrekt einliest. Eine Ausnahme wie ValueError entsteht während der Ausführung, beispielsweise bei int("Hallo"). Ein Logikfehler erzeugt unter Umständen gar keine Fehlermeldung: Das Programm läuft, rechnet aber falsch.

Bei einem Traceback stehen die beteiligten Aufrufe, Dateien und Zeilennummern. Lies zuerst die letzte Zeile: Dort stehen Ausnahmetyp und Beschreibung. Gehe dann zur angegebenen Stelle im eigenen Code. Der Fehlertext kann je nach Python-Version etwas anders aussehen.

Erwartbare Fehler behandeln

try:
    anzahl = int(input("Stückzahl: "))
except ValueError:
    print("Bitte eine ganze Zahl eingeben.")
else:
    print(f"Übernommen: {anzahl}")

Im try-Block steht die gefährdete Operation. Passt der Fehler zum genannten Typ, läuft except. else wird nur ausgeführt, wenn in try keine Ausnahme aufgetreten ist. Die Fehlermeldung verhindert den Absturz, fragt aber noch nicht erneut. Dafür kombinieren wir Fehlerbehandlung und Schleife.

Bis zu einer gültigen Eingabe fragen

def frage_positive_menge():
    while True:
        text = input("Menge in g, größer als 0: ").strip()
        try:
            menge_g = float(text.replace(",", "."))
        except ValueError:
            print("Bitte eine Zahl ohne Tausendertrennzeichen eingeben.")
            continue
        if not 0 < menge_g < float("inf"):
            print("Bitte eine endliche Zahl größer als 0 eingeben.")
            continue
        return menge_g

menge_g = frage_positive_menge()
print(f"Übernommen: {menge_g:.1f} g")

Die Zahlenumwandlung und die fachliche Prüfung sind unterschiedliche Schritte. Eine negative Zahl ist syntaktisch eine gültige Zahl, hier aber keine gültige Menge. Auch float()-Sonderwerte wie nan und inf sollen keine Materialmengen werden. Der Bereichsvergleich weist sie zurück. In Teil 15 lernen wir mit math.isfinite() eine ausdrücklich dafür gedachte Funktion kennen.

Fehler selbst auslösen

Eine Funktion kann mit raise ValueError("Menge muss positiv sein") eine ungültige Übergabe melden. Das ist hilfreich, wenn ihre Voraussetzungen verletzt werden. Fange Fehler dort ab, wo du sinnvoll darauf reagieren kannst. Ein pauschales except: würde auch Fehler verstecken, die du eigentlich beheben musst.

Schrittweise untersuchen

Öffne das Kostenbeispiel in Thonny. Starte den Debugmodus über das Menü oder Strg+F5 und gehe mit der angebotenen Schritt-Funktion weiter. Beobachte zuerst die Eingaben, dann Zwischenergebnisse und schließlich die Ausgabe. Alternativ helfen vorübergehend zusätzliche print()-Anweisungen.

Ändere bei der Fehlersuche immer nur eine Sache und wiederhole denselben Test. So erkennst du, ob die Änderung die Ursache behoben hat.

Mitmach-Aufgabe

Frage eine nicht negative ganze Stückzahl ab. Bei Text oder negativen Zahlen soll erneut gefragt werden. 0 ist ausdrücklich erlaubt.

Versuche die Aufgabe zuerst selbst. Vergleiche danach deinen Ansatz mit der Musterlösung. Andere Lösungen sind möglich, wenn sie dieselben Anforderungen erfüllen.

Musterlösung

while True:
    try:
        anzahl = int(input("Stückzahl ab 0: "))
    except ValueError:
        print("Bitte eine ganze Zahl eingeben.")
        continue
    if anzahl < 0:
        print("Negative Zahlen sind nicht erlaubt.")
        continue
    break
print(f"Stückzahl: {anzahl}")

Ergebnis prüfen

Teste Hallo, -2 und 0 nacheinander. Die ersten beiden Eingaben werden zurückgewiesen, 0 wird übernommen.

Typische Stolperstellen

Fehlerbehandlung behebt keine falsche Formel. Beschränke try auf die Operationen, deren Fehler du erwartest. Eine leer gelassene Eingabe ist ebenfalls kein gültiger Integer.

Was du jetzt kannst

  • Syntax-, Laufzeit- und Logikfehler unterscheiden.
  • ValueError gezielt abfangen.
  • Mit dem Debugger Werte verfolgen.

Passendes Cheatsheet

Zum Nachschlagen: Cheatsheet 10 – Fehlerbehandlung und Debugging. Dort findest du auch den vorhandenen PDF-Download.

Im nächsten Teil

In Teil 14 geht es um Textdateien lesen, schreiben und Pfade verstehen. Speichere Ergebnisse dauerhaft und lerne, wo dein Programm seine Dateien anlegt.

← Teil 12 · Kursübersicht · Weiter zu Teil 14 →