A Python programokban, ha futás idejű hiba történik, akkor egy úgynevezett kivétel keletkezik (Exception).
Ez minden esetben az Exception ősosztályból származó osztálypéldány, amit kivételnek nevezünk.
A kivétel keletkezésekor a program futása megakad és a futtató kiugrik a programblokkból. Ezt a kivételt vagy lekezeljük vagy tovább engedjük. Utóbbi esetén addig ugrál ki az adott programblokkokból, amíg a végén a futtatási verem kezdeti blokkjába kerül és onnan már a programból is kilép.
Ha bármelyik blokkban lekezeljük a kivételt, akkor a programunk tovább fut.
Egy keletkezett kivételt a try-except blokk használatával tudunk elkapni és lekezelni.
try:
...
except:
...
finally:
# mindig végrehajtódik (pl. erőforrások felszabadítása))
A fenti kód alkalmas bármilyen típusú exception elkapására, de legtöbbször egy olyan kivétel keletkezik, aminek a típusa nem maga az Exception, hanem egy specializált formája, amivel a rendszer megkönnyíti a kivételek kezelését.
Például létezik ArithmeticError, FileNotFoundError melyeknek az ősosztálya maga az Exception osztály.
Példa: fájl beolvasásra
try:
with open('adat.txt', 'r') as f:
data = f.read()
except FileNotFoundError as e:
print('Nincs meg a fájl:', e)
except PermissionError as e:
print('Nincs jogosultság:', e)
else: # sikeres futás esetén (ha nem volt kivétel, akkor fut le)
print('Sikeresen beolvasva')
Az előző példa C#-ban:
using System;
using System.IO;
Program
{
static void Main()
{
try
{
using (var f = new StreamReader("adat.txt"))
{
string data = f.ReadToEnd();
Console.WriteLine("Sikeresen beolvasva");
}
}
catch (FileNotFoundException e)
{
Console.WriteLine("Nincs meg a fájl: " + e.Message);
}
catch (UnauthorizedAccessException e)
{
Console.WriteLine("Nincs jogosultság: " + e.Message);
}
}
}