0%

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:

  1. int(text) löst einen ValueError aus.

  2. Python springt zu except ValueError.

  3. Das Programm gibt einen hilfreichen Hinweis aus.

  4. continue startet den nächsten Schleifendurchlauf.

Bei Text, der eine gültige ganze Zahl darstellt:

  1. Die Umwandlung gelingt.

  2. Die Ausnahmebehandlung wird übersprungen.

  3. break verlä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.

Der eingegebene Text wird an die int-Umwandlung übergeben. Bei ValueError wird ein Hinweis ausgegeben und ein weiterer Versuch gestartet. Bei Erfolg wird die ganze Zahl erfasst und die Schleife mit break verlassen.

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.