Eri poikkeustyyppien sieppaaminen Pythonissa
Samassa koodissa voi olla tarpeen siepata erityyppisiä poikkeuksia.
Oletetaan, että meidän täytyy siepata poikkeus nollalla jaettaessa. Tällaisessa virhetilanteessa tulee poikkeus:
ZeroDivisionError: division by zero
Siepataksesi sen, poikkeuksen nimi tulee
kirjoittaa except-lohkoon:
try:
print(1 / 0)
except ZeroDivisionError:
print('error: do not divide by zero')
Oletetaan myös, että meillä on lista:
lst = [1, 2, 3]
Jos asetat try-lohkoon koodia, jossa on toisenlainen
mahdollinen virhe, esimerkiksi olemattoman elementin
tulostamisen, poikkeus, jota ei siepata except-lohkossa,
etene eteenpäin ja tulostuu konsoliin. Tämän vuoksi
koodin suoritus pysähtyy:
lst = [1, 2, 3]
try:
print(lst[4]) # tulostaa IndexError: list index out of range
except ZeroDivisionError:
print('error: do not divide by zero')
Ratkaistaksesi tällaisen tilanteen, sinun tulee määrittää jokaiselle lohkolle vastaavan tyyppisen poikkeuksen nimi. Lisätään koodiimme poikkeus puuttuvalle elementille:
try:
print(lst[4])
except ZeroDivisionError:
print('error: do not divide by zero')
except IndexError:
print('error: elem is not exist')
Annettuna on seuraava koodi:
txt = '2'
res1 = txt + 3
res2 = txt1
Kirjoita koodi, joka sieppaa muuttujissa res1 ja res2
esiintyvät poikkeukset.