Preprečevanje izjem v Pythonu
V Pythonu je v primerjavi z drugimi programskimi jeziki zelo veliko situacij, ki povzročajo izjeme.
Oglejmo si jih podrobneje. Recimo, da imamo seznam:
lst = [1, 2, 3]
Dostopimo do neobstoječega elementa seznama:
print(lts[4])
Po izvedbi koda se prikaže napaka (izjema):
IndexError: list index out of range
Če pa želimo nadaljevati z delo brez prikaza izjeme, jo moramo ujeti s konstrukcijo try-except. Ima naslednjo sintakso:
try:
# koda, ki povzroči izjemo
except:
# obdelava napake
V bloku try je treba postaviti kodo, ki lahko vsebuje izjemo. Če med izvajanjem te kode pride do izjemne situacije, se izvajanje kode ne bo ustavilo, ampak bo prešlo v kodo bloka except. V tem bloku je treba navesti sporočilo, ki čim natančneje opiše bistvo nastale napake.
Če med izvajanjem bloka try ne pride do nobene izjemne situacije, se bo uporabna koda preprosto izvedla, koda iz bloka except pa ne.
Ujemimo našo izjemo pri dostopu do neobstoječega elementa seznama. Za to v blok try postavimo kodo s potencialno napako. V bloku except pa navedemo izpis sporočila 'error: elem is not exist' v konzolo:
lst = [1, 2, 3]
try:
print(lst[4])
except:
print('error: elem is not exist')
Po izvedbi koda se izpiše:
'error: elem is not exist'
Po preučitvi konstrukcije try-except naj bi se spremenil stil vaše kode. Zdaj morate vsa mesta, kjer lahko pride do izjemne situacije, zaviti v try, v bloku except pa opisati odziv na to izjemo.
Vprašajte uporabnika za dve števili. Eno delite z drugim. Ujemite izjemno situacijo deljenja z nič.
Vprašajte uporabnika za število. Poiščite kvadratni koren tega števila. Ujemite izjemno situacijo pridobivanja korena iz negativnega števila.
Podan je seznam. Vprašajte uporabnika za celo število. Pridobite element seznama, katerega številko je vnesel uporabnik. Ujemite izjemno situacijo, ki se bo zgodila, če je uporabnik vnesel številko zunaj obsega seznama.
Podan je naslednji koda:
num = '5'
res = num + 2
print(res)
Kaj je narobe s to kodo? Odpravite njene pomanjkljivosti.
Podan je naslednji koda:
lst = [1, 2, 3, 4]
def getElem(iter):
print(iter[4])
getElem(lst)
Kaj je narobe s to kodo? Odpravite njene pomanjkljivosti.