Poikkeusten käsittely Pythonissa
Pythonissa verrattuna muihin ohjelmointikieliin on erittäin paljon tilanteita, jotka aiheuttavat poikkeuksia.
Tarkastellaanpa niitä tarkemmin. Oletetaan, että meillä on lista:
lst = [1, 2, 3]
Viitataan listan olematomaan elementtiin:
print(lts[4])
Koodin suorittamisen jälkeen tulostuu virhe (poikkeus):
IndexError: list index out of range
Jos haluamme jatkaa työskentelyä ilman
poikkeuksen tulostamista, se tulee siepata
try-except-rakenteella. Sen
syntaksi on seuraava:
try:
# koodi, joka aiheuttaa poikkeuksen
except:
# virheen käsittely
try-lohkossa tulee sijoittaa koodi,
joka voi sisältää poikkeuksen. Jos
tämän koodin suorituksen aikana ilmenee
poikkeustilanne, koodin suoritus
ei keskeydy, vaan siirtyy except-lohkon
koodiin. Tässä lohkossa tulee
kirjoittaa viesti, joka kuvailee mahdollisimman
tarkasti esiintyneen virheen olemusta.
Jos try-lohkon suorituksen aikana
yhtään poikkeustilannetta ei sattunut,
niin hyödyllinen koodi suoritetaan vain, eikä except-lohkon
koodia suoriteta.
Siepataanpa poikkeutemme viitatessa
olematomaan listaelementtiin.
Sijoitetaan try-lohkoon koodi, jossa on
mahdollinen virhe. Ja except-lohkossa
ilmoitetaan konsoliin viesti 'error:
elem is not exist':
lst = [1, 2, 3]
try:
print(lst[4])
except:
print('error: elem is not exist')
Koodin suorittamisen jälkeen tulostuu:
'error: elem is not exist'
try-except-rakenteen opiskelun jälkeen
kirjoittamasi koodin tyyli pitäisi muuttua.
Nyt kaikki kohdat, joissa voi ilmetä
poikkeustilanne, tulee kääriä
try:iin, ja except-lohkossa
kuvata reaktio tähän poikkeukseen.
Kysy käyttäjältä kaksi numeroa. Jaa toinen toisella. Sieppaa nollalla jakamisen poikkeustilanne.
Kysy käyttäjältä numero. Etsi tämän numeron neliöjuuri. Sieppaa negatiivisen luvun juuren ottamisen poikkeustilanne.
Annettu lista. Kysy käyttäjältä kokonaisluku. Hae listan elementti, jonka numeron käyttäjä syötti. Sieppaa poikkeustilanne, joka tapahtuu, jos käyttäjä syötti numeron listan alueen ulkopuolella.
Annettu seuraava koodi:
num = '5'
res = num + 2
print(res)
Mikä tässä koodissa on vialla? Korjaa sen puutteet.
Annettu seuraava koodi:
lst = [1, 2, 3, 4]
def getElem(iter):
print(iter[4])
getElem(lst)
Mikä tässä koodissa on vialla? Korjaa sen puutteet.