Výjimky

Když se v Pythonu něco fatálně nepovede, nestane se to, že by program nekontrolovatelně spadnul. Na místo toho „vyhodí“ výjimku a dá vám možnost na ni reagovat. Můžete například pokračovat dál v jiné konfiguraci, smazat dočasné soubory a program ukončit čistě a tak podobně.

Výjimek je mnoho typů a ve vlastních programech si můžete vytvářet vlastní. Můžete tak reagovat na mimořádné události (jako například špatně zadaný uživatelský vstup, nefunkční internetové připojení, neexistující soubor a tak dál).

Následující kód uložte do souboru deleni.py

#!/usr/bin/env python3

def deleni(delenec, delitel):
    """Vydeli jedno cislo druhym
    """

    return delenec/delitel

print(deleni(10, 0))

A soubor spusťe:

$ python3 deleni.py

Traceback (most recent call last):
  File "deleni.py", line 9, in <module>
    print(deleni(10/0))
ZeroDivisionError: division by zero

Nemůžeme dělit nulou - program vyhodil výjimku a navedl nás na řádek 9 v souboru deleni.py. Program vyhodil speciální ZeroDivisionError výjimku, kterou můžeme zachytit a zareagovat na ni.

Odchycení výjimky

Předchozí kód upravíme následujícím způsobem:

#!/usr/bin/env python3

def deleni(delenec, delitel):
    """Vydeli jedno cislo druhym
    """

    try:
        return delenec/delitel
    except (ZeroDivisionError, error):
        print('Dělitel nesmí být nula!')
        return None

print(deleni(10/0))

Blok kódu, který hrozí výjimkou (v našem případě pouze jeden řádek) jsme uzavřeli mezi klíčová slova try a except, tedy zkus a kdyby to nedopadlo, tak

Jako parametr except se předá typ výjimky a název proměnné, do které bude uložena, abychom s ní případně mohli dál pracovat.