Výjimky
Výjimka (Exception) je mimořádný stav programu, tento stav by skončil chybou. K výjimce dojde vždy, když program nemůže vykonat daný krok, nebo by ho vykonal špatně. Třeba špatně zadaná data uživatelem, nula ve jmenovateli apod.
Např. očakáváme zadání od uživatele z klávesnice znak čísla, uživatel ale zadá písmeno. V programu máme v následujícím kroku převod znaků na číslo. Dojde k výjimce. Tento stav můžeme ale v moderních jazycích ošetřit.
Možná někoho napadne if, ale to není ono. Naštěstí existují příkazy, jak takový stav ošetřit:
Zachycení výjimky:
try:
…kód, který se provede - „zkusí“
except Exception:
…kód, který se provede jestliže dojde k výjimce = zachytí chybový stav
finally:
…kód, který se provede vždy – nemusí být
Pozn. Místo obecnějšího Exception můžeme napsat název kontrétního typu výjimky (viz dokumentace), např. except ZeroDivisionError: nebo except TypeError: apod. Větví except může být v jednom ošetření výjimky více a podle typu výjimky může být v každé takové větvi jiný kód.
Pozn. Obdobně jako je podmínka úplná a neúplná, i u výjimky existuje ještě větev else. Tedy try - except - else. Větev else se vykoná, když nedojde k výjimce. Celá konstrukce může tedy být try - except - else - finally.
try:
…kód, který se provede - „zkusí“
except Exception:
…kód, který se provede jestliže dojde k výjimce = zachytí chybový stav
else:
…kód, který se provede jestliže NEDOJDE k výjimce - nemusí být
finally:
…kód, který se provede vždy – nemusí být
Příklad programu. Nekonečný cyklus, v cyklu se čeká na zadání vstupních údajů od uživatele. Má to být číslice (znaky textu). Chceme text převést na číslo. Pokud ale uživatel nezadá správně číslici, ale např. písmeno, dojde při přetypování na číslo k výjimce. Tu ošetříme tak, že vypíšeme hlášení a příkazem continue skočíme na začátek nového cyklu. V případě, že nedojde k výjimce, program normálně pokračuje dál.
while True: # nekonečný cyklus
try:
a = float(input("Zadej první číslo: ")) # vstup z klávesnice a převod na float
b = float(input("Zadej druhé číslo: ")) # vstup z klávesnice a převod na float
except Exception: # když dojde k výjimce
print ("Špatné zadání, zadej znovu") # výstup
continue # vyskoč z aktuálního cyklu a začni nový
# pokračování programu v případě, že nedošlo k výjimce
- Podrobnosti
- Zobrazení: 0