Pro zachycení chyby lze také použít příkaz try-except. Ukažme si to na příkladu:
def read_int():
while True:
vysledek = input("Napis cislo: ")
try:
return int(vysledek)
except:
print("Spatny vstup, nejedna se o cislo!")
Funkce read_int má za úkol získat od uživatele celé číslo a vrátit ho. Uvnitř této funkce máme nekonečný cyklus, který načítá řetězec do proměnné vysledek. V cyklu je dále blok kódu uvozený příkazem try, který obsahuje pokyny k převedení vstupu na celé číslo pomocí int.
Pokud se podaří převedení vstupu na číslo bez problémů, program tento proces ukončí a vrátí zadané číslo.
Nicméně, pokud uživatel zadá neplatný vstup (například text místo čísla), vznikne výjimka ValueError. V takovém případě se provede blok except. V tomto bloku program vypíše chybové hlášení "To nebylo číslo!" a cyklus se znovu zeptá uživatele na vstup. Tím je zajištěno, že program bude pokračovat v čekání na platný vstup od uživatele, dokud jej nezadá.
V Pythonu existuje také příkaz raise, který slouží k vyvolání výjimky, pokud chceme program přerušit a signalizovat nějaký problém. Tento příkaz můžeme použít, když dojde k nečekané situaci, kterou program nemůže automaticky vyřešit. Například, pokud uživatel zadá neplatný vstup, můžeme použít raise ValueError("Chyba vstupu"), čímž program přerušíme a informujeme uživatele o chybě.
Za zmínku stojí ještě také blok finally. Finally se v Pythonu používá k tomu, že obsahuje kód, který je vždy vykonán, ať už došlo k výjimce nebo ne. Je ideální pro operace, které je potřeba provést bez ohledu na to, zda program skončí chybou nebo úspěšně, například pro uzavření souboru nebo uvolnění systémových zdrojů.
Tohle by bylo z teorie vše, a proto nastává čas si znalosti procvičit. Zde jsou pro nás připravena zadání (včetně řešení) a nakonec testovací kvíz.