*Prestrezanje izjem

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!


Izvedi Počisti



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.