Fouten, validatie en debuggen · oefening
Probeer opnieuw met try en except
Een omzetfunctie kan None teruggeven, maar een interactief programma heeft vaak een geldig antwoord nodig voordat het verder kan. Combineer een lus met try en except:
while True:
text = input("Temperature: ")
try:
temperature = int(text)
except ValueError:
print("Enter a whole-number temperature.")
continue
break
print(f"Recorded: {temperature}")
Volg de twee paden
Bij ongeldige tekst:
veroorzaakt
int(text)eenValueError;springt Python naar
except ValueError;drukt het programma bruikbare uitleg af;
begint
continuede volgende ronde van de lus.
Bij geldige tekst voor een geheel getal:
slaagt de omzetting;
wordt de foutafhandeling overgeslagen;
verlaat
breakde lus.
Alleen het geslaagde pad bereikt de laatste afdrukinstructie.
Deze stroom houdt zowel het pad voor opnieuw proberen als het geslaagde pad zichtbaar. Volg de rode kant terug naar een nieuwe invoerpoging; volg de groene kant via break naar de opgeslagen waarde. In de figuur betekent “Input text” invoertekst, “Failure” mislukking en “Guidance” uitleg. “Success: integer” betekent dat de omzetting een geheel getal opleverde; “Recorded value” is de opgeslagen waarde.

Waarom dit meer accepteert dan .isdigit()
Het programma laat int() bepalen of de omzetting werkt. Het accepteert daarom strings zoals:
"12"
"-7"
"+4"
Het wijst strings af zoals:
"three"
"4.5"
Dit past bij een eis die elk geheel getal toestaat, ook negatieve gehele getallen. Als het programma een niet-negatieve waarde nodig heeft, is omzetten slechts de eerste validatiestap. Controleer na de omzetting ook het numerieke bereik. Het hoofdstukproject doet precies dat.
Plaats break zorgvuldig
Zet break niet direct na input(). Dat zou de lus beëindigen voordat een mislukte omzetting een nieuwe poging kan starten.
Vergeet niet binnen de lus een nieuw antwoord op te halen. Steeds dezelfde ongeldige string controleren zou een programma opleveren dat nooit verder komt.
Als je programma blijft draaien zonder verder te komen, gebruik dan Stop bij de editorbediening. Volg daarna de paden door je lus: een ongeldig antwoord moet naar een nieuwe aanroep van input() leiden en een geldig antwoord moet break of return bereiken.
Wat gebeurt er wanneer deze code wordt uitgevoerd?
text = "-5"
try:
number = int(text)
except ValueError:
print("Not an integer")
Opdracht
Schrijf een lus die blijft vragen totdat de gebruiker een geheel getal invoert.
Stel deze vraag:
Enter an integer:
Druk dit af wanneer de omzetting een ValueError veroorzaakt:
That was not an integer. Try again.
Haal daarna een nieuw antwoord op. Verlaat de lus zodra de omzetting slaagt en druk dit af:
Accepted: -7
De voorbereide antwoorden zijn three, 4.5 en -7. Vang alleen ValueError op. Een negatief geheel getal is geldig voor deze oefening.