Kaj se zgodi, če uporabnik pri programu hitrost2.py
namesto števila vnese besedilo?
Koliko km si prevozil(a)? trideset Traceback (most recent call last): File "hitrost2.py", line 3, in <module> ValueError: could not convert string to float: 'trideset'
Program se takoj konča, in to z nič kaj prijaznim sporočilom. Nepričakovan uporabnikov vnos je namreč povzročil izjemo, usodno napako med izvajanjem programa. Funkcija int
pač ne zna pretvoriti besedila trideset
v število 30, zato sproži izjemo tipa ValueError
.
Python pozna veliko različnih tipov izjem, npr. ZeroDivisionError
(izjema zaradi deljenja z ničlo), NameError
(nedefinirana spremenljivka) itd.
Seveda si program z vnosi, kot so trideset
ali hopsasa
, ne more kaj dosti pomagati, lahko pa se vsaj malo vljudneje konča. To lahko dosežemo tako, da morebitno izjemo prestrežemo s sestavljenim stavkom try-except
.
Kako deluje stavek try-except
? Blok try
se prične izvajati po običajnih pythonovih pravilih, torej stavek za stavkom. Če se kjerkoli med izvajanjem tega bloka sproži izjema, se takoj prične izvajati blok except
. V nasprotnem primeru se blok except
preskoči.
Če pri izvajanju programa na desni uporabnik za pot vnese neko celo ali realno število, za vse ostale podatke pa cela števila, se izjema tipa ValueError
ne sproži in program deluje enako kot doslej. V nasprotnem primeru pa program izpiše prijazno sporočilo in se nemudoma konča. Brez klica exit()
bi program pričel izvajati tudi stavke po stavku try-except
, kar bi prej ali slej sprožilo še eno izjemo. Preizkusi sam in razmisli, zakaj!
Python pozna veliko različnih tipov izjem, npr. ZeroDivisionError
(izjema zaradi deljenja z ničlo), NameError
(nedefinirana spremenljivka) itd. V našem programu blok try-except
prestreza samo izjeme tipa ValueError
. Če želimo prestreči več različnih tipov izjem, zapišemo več zaporednih blokov except
.