Ga naar hoofdinhoud

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}")
Voorspel
Wat zet dit programma op het scherm?
Kies wat jij denkt. Bij het goede antwoord zie je de uitleg.

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'