16a Try en except
Deze les gebruikt int() en float(), uit Tekst naar getal.
Een programma dat om een getal vraagt, krijgt soms tekst. Dan stopt het met een foutmelding:
tekst = "twaalf"
getal = int(tekst)
print(getal * 2)
Uitvoer:
ValueError: invalid literal for int() with base 10: 'twaalf'
Met try en except vang je zo'n fout af. Je zegt tegen Python: probeer
dit, en als het misgaat, doe dan dat.
tekst = "twaalf"
try:
getal = int(tekst)
print(getal * 2)
except ValueError:
print("Dat is geen getal.")
print("Klaar.")
Uitvoer:
Dat is geen getal.
Klaar.
Wat er gebeurt
- Python voert de regels onder
try:uit, één voor één. - Gaat er een regel mis met een
ValueError, dan springt Python meteen naar het blok onderexcept ValueError:. De rest van hettry-blok slaat hij over:print(getal * 2)gebeurt dus niet. - Na het
except-blok gaat het programma verder, metprint("Klaar.").
Gaat er niets mis, dan slaat Python het except-blok juist over. Verander
"twaalf" in "12" en kijk wat er dan gebeurt:
tekst = "twaalf"
try:
getal = int(tekst)
print(getal * 2)
except ValueError:
print("Dat is geen getal.")
print("Klaar.")Er gaat iets mis
tekst = "twaalf"
try:
getal = int(tekst)
except ZeroDivisionError:
print("Dat is geen getal.")
Uitvoer:
ValueError: invalid literal for int() with base 10: 'twaalf'
Het except-blok vangt alleen de fout die erachter staat. Hier is dat een
ZeroDivisionError, maar er ging iets anders mis. Dan stopt het programma
alsnog. Schrijf achter except de naam uit de foutmelding: ValueError.
Opdracht 16a.1: Een leeftijd
In tekst staat een leeftijd, maar iemand heeft hem in letters getypt. Zet
hem om met int(). Lukt dat, print dan hoe oud de persoon volgend jaar is.
Lukt het niet, print dan Typ je leeftijd als getal.
Verwachte uitvoer:
Typ je leeftijd als getal.
tekst = "vijftien"
leeftijd = int(tekst)
print(f"Volgend jaar ben je {leeftijd + 1}.")Klik hier voor een tip.
Zet de twee regels onder try:, allebei ingesprongen. Daaronder komt
except ValueError: met de print van de melding.
Klik hier voor de oplossing.
tekst = "vijftien"
try:
leeftijd = int(tekst)
print(f"Volgend jaar ben je {leeftijd + 1}.")
except ValueError:
print("Typ je leeftijd als getal.")
Uitvoer:
Typ je leeftijd als getal.
Met tekst = "15" print hetzelfde programma Volgend jaar ben je 16.
Opdracht 16a.2: Een komma in de prijs
In Nederland schrijf je een prijs met een komma, maar float() wil een punt.
Vang de fout af en print dan een tip. In de startcode zorgt :.2f voor twee
cijfers achter de punt, zoals :.1f in les 11c voor één cijfer zorgde.
Verwachte uitvoer:
Gebruik een punt in plaats van een komma, bijvoorbeeld 12.50
prijs = "12,50"
bedrag = float(prijs)
print(f"Met btw: {bedrag * 1.21:.2f}")Klik hier voor een tip.
float("12,50") geeft ook een ValueError. De opbouw is dezelfde als in
16a.1.
Klik hier voor de oplossing.
prijs = "12,50"
try:
bedrag = float(prijs)
print(f"Met btw: {bedrag * 1.21:.2f}")
except ValueError:
print("Gebruik een punt in plaats van een komma, bijvoorbeeld 12.50")
Uitvoer:
Gebruik een punt in plaats van een komma, bijvoorbeeld 12.50