Išimčių perėmimas Python kalboje
Python kalboje, palyginus su kitomis programavimo kalbomis, yra labai daug situacijų, sukeliančių išimtis.
Pažvelkime į jas išsamiau. Tarkime, kad turime sąrašą:
lst = [1, 2, 3]
Kreipkimės į neegzistuojantį sąrašo elementą:
print(lts[4])
Vykdant kodą, bus išvesta klaida (išimtis):
IndexError: list index out of range
Jei mums reikia tęsti darbą be
išimties išvedimo, ją reikia pagauti
naudojant try-except konstrukciją. Ji
turi tokį sintaksę:
try:
# kodas, sukeliantis išimtį
except:
# klaidos apdorojimas
try bloke reikėtų talpinti kodą,
kuris gali turėti išimtį. Jei
vykdant šį kodą atsirastų
išimtinė situacija, tai kodo
vykdymas nesustos, o pereis į
except bloko kodą.
Šiame bloke reikėtų
aprašyti pranešimo išvedimą, kuo
tiksliau apibūdinantį iškilusios klaidos esmę.
Jei vykdant try bloką
jokių išimtinių situacijų neatsirado,
tai naudingas kodas tiesiog bus vykdomas, o kodas
iš except bloko - ne.
Pagaukime mūsų išimtį kreipiantis
į neegzistuojantį sąrašo elementą. Tam
try bloke patalpinkime kodą su
potencialia klaida. O except bloke
nurodykime pranešimo 'error: elem is not exist' išvedimą į konsolę:
lst = [1, 2, 3]
try:
print(lst[4])
except:
print('error: elem is not exist')
Vykdant kodą, bus išvesta:
'error: elem is not exist'
Išstudijavus try-except konstrukciją,
jūsų parašyto kodo stilius turėtų pasikeisti.
Dabar visas vietas, kuriose gali atsirasti
išimtinė situacija, reikia apvynioti
try, o except bloke
aprašyti reakciją į šią išimtį.
Paklauskite vartotojo dviejų skaičių. Padalinkite vieną iš kito. Pagaukite išimtinę situaciją dalijimo iš nulio.
Paklauskite vartotojo skaičiaus. Raskite šio skaičiaus kvadratinę šaknį. Pagaukite išimtinę situaciją šaknies traukimo iš neigiamo skaičiaus.
Duotas sąrašas. Paklauskite vartotojo sveikojo skaičiaus. Gauti sąrašo elementą, kurio numerį įvedė vartotojas. Pagaukite išimtinę situaciją, kuri atsitiks, jei vartotojas įvedė skaičių už sąrašo diapazono ribų.
Duotas toks kodas:
num = '5'
res = num + 2
print(res)
Kas negerai su šiuo kodu? Ištaisykite jo trūkumus.
Duotas toks kodas:
lst = [1, 2, 3, 4]
def getElem(iter):
print(iter[4])
getElem(lst)
Kas negerai su šiuo kodu? Ištaisykite jo trūkumus.