...
Poikkeukset
...
ovat
...
ohjelmoinnissa
...
keino
...
käsitellä
...
virhetilanteita.
...
Virhetilanteen
...
sattuessa
...
luodaan
...
poikkeus,
...
joka
...
voidaan
...
ns.
...
ottaa
...
kiinni
...
poikkeuksille
...
tarkoitetuilla
...
rakenteella.
...
Jos
...
poikkeusta
...
ei
...
oteta
...
kiinni,
...
ohjelma
...
kaatuu
...
ja
...
tulostetaan
...
poikkeuksen
...
yhteydessä
...
oleva
...
virhe
...
viesti.
...
Poikkeuksia
...
syntyy
...
ohjelmointivirheistä
...
kun
...
Pythonin
...
sisäänrakennettuja
...
rakenteita
...
käytetään
...
väärin
...
kuten
...
jakamalla
...
nollalla
...
tai
...
syöttämällä
...
funktioihin
...
parametreiksi
...
sopimattomia
...
arvoja.
...
Poikkeuksia
...
voi
...
syntyä
...
myös
...
vaikka
...
ohjelmoinnissa
...
ei
...
ole
...
virheitä;
...
esim.
...
tiedostoa
...
avattaessa
...
avattavaa
...
tiedostoa
...
ei
...
välttämättä
...
löydy,
...
mikä
...
synnyttää
...
virheen
...
vaikka
...
ohjelma
...
olisi
...
ihan
...
toimiva.
...
Poikkeuksia
...
voi
...
synnyttää
...
myös
...
itse
...
avainsanalla
...
raise,
...
jonka
...
jälkeen
...
kirjoitetaan
...
haluttu
...
poikkeus,
...
jolle
...
annetaan
...
virhe
...
viesti
...
kirjoittamalla
...
poikkeuksen
...
jälkeen
...
sulkeisiin
...
merkkijono.
...
Tässä
...
esimerkissä
...
synnytetään
...
tahallisesti
...
poikkeus,
...
jota
...
ei
...
käsitellä.
Code Block |
---|
} raise ZeroDivisionError("ei voi jakaa nollalla") input("Paina Enter-näppäintä lopettaaksesi.") {code} |
Poikkeuksia
...
voidaan
...
synnyttää
...
itse
...
tehdyissä
...
funktioissa
...
esimerkiksi
...
viestittämään
...
vääränlaisista
...
parameterista
...
ja
...
muista
...
virheistä.
...
Poikkeukset
...
käsitellään
...
avainsanalla
...
try
...
alkavalla
...
rakenteella
...
ja
...
sitä
...
seuraavilla
...
except
...
ja/tai
...
finally
...
lohkoilla.
...
Lohkoon
...
try
...
tulee
...
varsinainen
...
koodi,
...
joka
...
halutaan
...
ajaa
...
ja
...
jossa
...
saattaa
...
syntyä
...
poikkeuksia.
...
Lohkoon
...
except
...
vastaavan
...
avainsanan
...
lisäksi
...
poikkeuksen,
...
joka
...
halutaan
...
käsitellä.
...
Poikkeukset
...
ovat
...
oliota
...
ja
...
poikkeusolioita
...
määrittäviä
...
luokkia
...
useita,
...
siksi
...
täytyy
...
määrittää
...
mikä
...
poikkeus
...
halutaan
...
käsitellä.
...
Märittämällä
...
käsiteltäväksi
...
poikkeukseksi
...
Exception
...
käsitellään
...
osiossa
...
kaikki
...
poikkeukset,
...
koska
...
kaikki
...
poikkeusluokat
...
perivät
...
tämän
...
luokan
...
(perinnästä
...
tarkemmin
...
myöhemmin).
...
Tässä
...
esimerkissä
...
jaetaan
...
luku
...
nollalla
...
ja
...
otetaan
...
siitä
...
syntynyt
...
poikkeus
...
kiinni
...
try-except
...
rakenteella.
Code Block |
---|
} try: a = 1 / 0 except ZeroDivisionError: print("Nollalla jako käsitelty.") input("Paina Enter-näppäintä lopettaaksesi.") {code} |
Jos
...
ei
...
kumminkaan
...
ole
...
except
...
lohkoa,
...
jossa
...
poikkeus
...
käsiteltäisiin,
...
niin
...
ohjelma
...
kaatuu.
...
Tähän
...
voi
...
kuitenkin
...
vaikuttaa
...
finally
...
osiolla,
...
joka
...
ajetaan
...
ohjelman
...
kaatuessa
...
vastaavassa
...
try
...
lohkossa
...
tapahtuneen
...
virheen
...
seurauksena.
...
Tässä
...
esimerkissää
...
tallennetaan
...
luodun
...
poikkeuksen
...
virhe
...
tulostus
...
tiedostoon
...
ja
...
kerrotaan
...
modulin
...
time
...
funktion
...
localtime
...
avulla
...
kellonaika
...
jolloin
...
virhe
...
tapahtui.
Code Block |
---|
} import time s = "Ohjelmassa tapahtui virhe, jonka takia se suljettiin klo %s:%s." try: a = 3 + "w" except ZeroDivisionError: print("Nollalla jako käsitelty.") finally: errorLog = open("errorlog.txt", 'w') errorLog.write(s % (time.localtime()[3], time.localtime()[4])) errorLog.close() input("Paina Enter-näppäintä lopettaaksesi.") {code} |