16c De melding bewaren
Soms wil je wel laten zien wat Python van de fout vond, maar zonder dat je
programma stopt. Met as bewaar je de fout in een variabele:
tekst = "twaalf"
try:
getal = int(tekst)
except ValueError as fout:
print(f"Dat lukte niet: {fout}")
Er gaat iets mis
De fout aan tekst plakken met +
try:
getal = int("twaalf")
except ValueError as fout:
print("Dat lukte niet: " + fout)
Uitvoer:
TypeError: can only concatenate str (not "ValueError") to str
fout is geen tekst maar een fout. Met + plak je alleen tekst aan tekst. Zet hem in een f-string: f"Dat lukte niet: {fout}".
as vergeten
try:
getal = int("twaalf")
except ValueError fout:
print(fout)
Uitvoer:
SyntaxError: invalid syntax
Tussen de naam van de fout en je variabele staat het woord as: except ValueError as fout:.
Opdracht 16c.1: Een logboek
Zet elk getal uit de lijst om met int(). Lukt het niet, print dan de
melding van Python achter Overgeslagen:.
Verwachte uitvoer:
3
Overgeslagen: invalid literal for int() with base 10: 'vier'
5
teksten = ["3", "vier", "5"]
for tekst in teksten:
print(int(tekst))Klik hier voor een tip.
Het try-blok staat binnen de for-loop, zodat de loop na een fout
doorgaat met de volgende tekst.
Klik hier voor de oplossing.
teksten = ["3", "vier", "5"]
for tekst in teksten:
try:
print(int(tekst))
except ValueError as fout:
print(f"Overgeslagen: {fout}")
Uitvoer:
3
Overgeslagen: invalid literal for int() with base 10: 'vier'
5
Opdracht 16c.2: Een prijs die niet klopt
Zet de prijs om met float(). Lukt dat niet, print dan welke tekst er stond
én wat Python ervan vond.
Verwachte uitvoer:
Kon '12,50' niet lezen: could not convert string to float: '12,50'
prijs = "12,50" bedrag = float(prijs) print(bedrag)
Klik hier voor een tip.
Na except ValueError as fout: heb je in de f-string zowel prijs als
fout tot je beschikking. Zet prijs tussen enkele aanhalingstekens in de
tekst.
Klik hier voor de oplossing.
prijs = "12,50"
try:
bedrag = float(prijs)
print(bedrag)
except ValueError as fout:
print(f"Kon '{prijs}' niet lezen: {fout}")
Uitvoer:
Kon '12,50' niet lezen: could not convert string to float: '12,50'