Python 2/Virheidenhallinta
Virheitä tapahtuu usein ohjelmissa. Ongelmana saattaa esimerkiksi olla se, että käytäjä antaa vääränlaisen syötteen. Virheitä voi hallita try-except- ja try-finally-virheenhallintarakenteilla.
Esimerkki ohjelmasta, jossa tapahtuu virhe.
#!/usr/bin/python
# -*- coding: utf-8 -*-
numero = "Peikko"
print numero+1
- Tuloste
Traceback (most recent call last): File "./test.py", line 6, in <module> print numero+1 TypeError: cannot concatenate 'str' and 'int' objects
Ohjelma kaatuu virheeseen. numero muuttuja olisi voinnut sisältää esimerkiksi käyttäjän antaman syöteen, jossa käyttäjän olisi pitänyt antaa luku, mutta käyttäjä antoikin syötteeksi tekstiä.
try-except-virheenhallintarakenne
muokkaatry-except-virheenhallintarakenteessa pitää olla yksi try-osio ja vähintää yksi except-osio. try-except-virheenhallintarakenne ei lopeta ohjelmaa vaan ohjelman suorittaminen jatkuu virheenhallintarakenteen jälkeen. Esimerkki try-except-virheenhallintarakenteesta, jossa kerrotaan virheestä.
#!/usr/bin/python
# -*- coding: utf-8 -*-
numero = "Peikko"
# try-osio
try:
print(numero+1)
# except-osio suoritetaan jos try-osiossa tapahtuu virhetilanne
except:
print("Tapahtui virhe")
- Tuloste
Tapahtui virhe
Tämä ei vielä kerro miksi virhe tapahtui. Jos except-osiossa ei määritetä virhetilanteita, joissa se pitää suorittaa niin se suoritetaan kaikissa try-osion virhetilanteissa.
Esimerkki, jossa määritetään virhetilanne.
#!/usr/bin/python
# -*- coding: utf-8 -*-
numero = "Peikko"
# try-osio
try:
print(numero+1)
# suoritetaan jos try-osiossa tapahtuu TypeError-virhe
except TypeError:
print("Virheellinen syöte")
# Suoritetaan kaikissa muissa virhetilanteissa
except:
print("Tapahtui virhe")
print("Ohjelma suorittaminen jatkuu")
- Tuloste
Virheellinen syöte Ohjelma suorittaminen jatkuu
Tämän virheen tuloste kertoo jo paljon enemmän. Virheilmoituksen tilalla voisi esimerkiksi pyytää käyttäjää antamaan syötteen uudelleen. Esimerkistä näkyy myös se, että ohjelman suorittaminen jatkuu vaikka tapahtuisi virhe.
try-except-else-virheenhallintarakenne
muokkaaEsimerkki try-except-else-virheenhallintarakenteesta.
#!/usr/bin/python
# -*- coding: utf-8 -*-
numero = 2
# try-osio
try:
print(numero+1)
# suoritetaan jos try-osiossa tapahtuu TypeError-virhe
except TypeError:
print("Virheellinen syöte")
# Suoritetaan vain jos try-osiossa ei tapahtunut virhettä
else:
print("Laskeminen onnistui")
- Tuloste
3 Laskeminen onnistui
else-osio suoritetaan vain silloi kun try-osiossa ei tapahdu virhettä.
try-finally-virheenhallintarakenne
muokkaatry-finally-virheenhallintarakenteen tarkoitus on sulkea ohjelma hallitusti. try-finally-virheenhallintarakenteessa virheen tapahtuessa try-osiossa suoritetaan finally-osio, jonka jälkeen ohjelman suorittaminen lopetetaan.
Esimerkki try-finally-virheenhallintarakenteesta
#!/usr/bin/python
# -*- coding: utf-8 -*-
numero = "Peikko"
# try-osio
try:
print(numero+1)
# finally-osio suoritetaan jos try-osiossa tapahtuu virhe
finally:
print("Virheellinen syöte")
# Viesti "Laskeminen onnistui" voidaan tulostaa tässä kohtaa, koska sitä ei tulosteta virheen tapahtuessa
print("Laskeminen onnistui")
- Tuloste
Virheellinen syöte
Yleisimmät virheet
muokkaaPythonissa on paljon erilaisia virhetyyppejä.
Taulukko yleisimmistä virheluokista
Virheluokka | Kuvaus |
---|---|
Except | Yleisluokka |
TypeError | Virheellinen muuttujan tyyppi |
ValueError | Virheellinen muuttujan arvo |
Johdanto: | |
---|---|
Tietotyypit ja tietorakenteet: |
Luvut - Merkkijonot - Lista - Monikko (tuple) - Sanakirja - Joukko (set) |
Ohjausrakenteet | |
Muut kielen rakenteet: |
Moduuli - Luokka - Funktio - Virheidenhallinta - Tiedosto |
Graafinen käyttöliittymä: | |
Harjoitustehtäviä: | |
Lisätiedot ja lähteet: |