Kivételkezelés

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); } } }