Įvairių tipų išimčių perėmimas Python kalboje
Viename ir tame pačiame kode gali prireikti perimti įvairių tipų išimtis.
Tarkime, kad mums reikia pagauti išimtį dalijant iš nulio. Esant tokio tipo klaidai, iškyla išimtis:
ZeroDivisionError: division by zero
Kad ją pagautumėte, išimties pavadinimą reikia
įrašyti except bloke:
try:
print(1 / 0)
except ZeroDivisionError:
print('klaida: nedalinkite iš nulio')
Taip pat tarkime, kad turime sąrašą:
lst = [1, 2, 3]
Jei try bloke parašysite kodą su kita
potencialia klaida, pavyzdžiui, su neegzistuojančio
elemento išvedimu, tai išimtis,
nepagauta except bloke, praeis
toliau ir bus išvesta į konsolę. Dėl to
sustos kodo veikimas:
lst = [1, 2, 3]
try:
print(lst[4]) # išves IndexError: list index out of range
except ZeroDivisionError:
print('klaida: nedalinkite iš nulio')
Norint išspręsti tokią situaciją, reikia nurodyti kiekviename bloke atitinkamo tipo išimčių pavadinimą. Pridėkime prie mūsų kodo išimtį dėl trūkstamo elemento:
try:
print(lst[4])
except ZeroDivisionError:
print('klaida: nedalinkite iš nulio')
except IndexError:
print('klaida: elementas neegzistuoja')
Duotas toks kodas:
txt = '2'
res1 = txt + 3
res2 = txt1
Parašykite kodą, kad perimtumėte pateiktas
kintamuosiuose res1 ir res2
išimtis.