Fehler, Validierung und Fehlersuche · Übung
Versuche es mit try und except erneut
Eine Umwandlungsfunktion kann None zurückgeben, aber ein interaktives Programm braucht oft eine gültige Antwort, bevor es fortfahren kann. Verbinde eine Schleife mit try und except:
while True:
text = input("Temperature: ")
try:
temperature = int(text)
except ValueError:
print("Enter a whole-number temperature.")
continue
break
print(f"Recorded: {temperature}")
Verfolge die beiden Wege
Bei ungültigem Text:
int(text)löst einenValueErroraus.Python springt zu
except ValueError.Das Programm gibt einen hilfreichen Hinweis aus.
continuestartet den nächsten Schleifendurchlauf.
Bei Text, der eine gültige ganze Zahl darstellt:
Die Umwandlung gelingt.
Die Ausnahmebehandlung wird übersprungen.
breakverlässt die Schleife.
Nur der erfolgreiche Weg erreicht die abschließende Ausgabe.
Dieser Ablauf zeigt den Weg zum erneuten Versuch und den Erfolgsweg gleichzeitig. Folge der roten Seite zurück zu einem neuen Eingabeversuch. Folge der grünen Seite durch break zum erfassten Wert.

Warum das mehr akzeptiert als .isdigit()
Das Programm fragt int(), ob die Umwandlung funktioniert. Deshalb akzeptiert es Strings wie:
"12"
"-7"
"+4"
Es lehnt Strings wie diese ab:
"three"
"4.5"
Das entspricht einer Anforderung, die jede ganze Zahl zulässt, einschließlich negativer ganzer Zahlen. Braucht das Programm dagegen einen nicht negativen Wert, ist die Umwandlung nur der erste Validierungsschritt. Prüfe nach der Umwandlung auch den Zahlenbereich. Genau das wird das Kapitelprojekt tun.
Platziere break sorgfältig
Setze break nicht direkt hinter input(). Dadurch würde die Schleife enden, bevor eine fehlgeschlagene Umwandlung einen erneuten Versuch auslösen kann.
Vergiss nicht, innerhalb der Schleife eine neue Antwort einzulesen. Wenn du denselben ungültigen String erneut prüfst, kommt das Programm nicht weiter.
Wenn dein Programm weiterläuft, ohne voranzukommen, verwende Stop in der Editorsteuerung. Verfolge dann die Wege durch deine Schleife: Eine ungültige Antwort sollte zu einem neuen input()-Aufruf führen, eine gültige Antwort zu break oder return.
Was passiert, wenn dieser Code ausgeführt wird?
text = "-5"
try:
number = int(text)
except ValueError:
print("Not an integer")
Aufgabe
Schreibe eine Schleife, die so lange fragt, bis der Nutzer eine ganze Zahl eingibt.
Verwende diese Eingabeaufforderung:
Enter an integer:
Wenn die Umwandlung einen ValueError auslöst, gib Folgendes aus:
That was not an integer. Try again.
Lies dann eine weitere Antwort ein. Wenn die Umwandlung gelingt, verlasse die Schleife und gib Folgendes aus:
Accepted: -7
Die vorbereiteten Antworten sind three, 4.5 und -7. Fange nur ValueError ab. Eine negative ganze Zahl ist für diese Übung gültig.