Pokud dojde při provádění programu k chybě, Python ji ohlásí.
def f(x, y):
print(x/y)
f(1, 0)
--------------------------------------------------------------------------- ZeroDivisionError Traceback (most recent call last) ~\AppData\Local\Temp/ipykernel_27660/1492903607.py in <module> 1 def f(x, y): 2 print(x/y) ----> 3 f(1, 0) ~\AppData\Local\Temp/ipykernel_27660/1492903607.py in f(x, y) 1 def f(x, y): ----> 2 print(x/y) 3 f(1, 0) ZeroDivisionError: division by zero
Chyba vygeneruje výjimku, například těchto typů:
ZeroDivisionError
– dělení nulouValueError
– chybný argument (třeba log(-4))IndexError
– přístup k indexu mimo rozsahKeyError
– čtení neexistujícího klíče ve slovníkuFileNotFoundError
– otevření neexistujícího souboruMemoryError
– došla paměťKeyboardInterrupt
– běh programu přerušen pomocí Ctrl-C
try:
# blok, ve kterém může vzniknout výjimka
except:
# blok, který se provede, pokud k výjimce došlo
Příklad (nepořádně):
s = [4, 7, 8]
try:
s[4] = s[4]+1
except:
print("Došlo k chybě")
Došlo k chybě
try:
x = int(input("Zadejte první číslo: "))
y = int(input("Zadejte druhé číslo: "))
print(x/y)
except ZeroDivisionError:
print("Dělení nulou.")
except ValueError as x:
print("Chyba:", x)
print("Zadejte dvě čísla.")
Typy výjimek tvoří hierarchii (třeba FileNotFoundError
je potomkem OSError
), except
umí zachytit i obecnější typ.
Výjimku můžeme sami vytvořit:
raise RuntimeError("Došlo k chybě")
--------------------------------------------------------------------------- RuntimeError Traceback (most recent call last) ~\AppData\Local\Temp/ipykernel_27660/3027279306.py in <module> ----> 1 raise RuntimeError("Došlo k chybě") RuntimeError: Došlo k chybě