Zachytávání výjimek v Pythonu
V Pythonu ve srovnání s jinými programovacími jazyky existuje velmi mnoho situací, které vyvolávají výjimky.
Pojďme se na ně podívat podrobněji. Předpokládejme, že máme následující seznam:
lst = [1, 2, 3]
Přistoupíme k neexistujícímu prvku seznamu:
print(lts[4])
Po provedení kodu se vypíše chyba (výjimka):
IndexError: list index out of range
Pokud potřebujeme pokračovat v práci bez
výpisu výjimky, měli bychom ji zachytit
pomocí konstrukce try-except. Ta
má následující syntaxi:
try:
# kód, který může vyvolat výjimku
except:
# ošetření chyby
V bloku try by měl být umístěn kód,
který může obsahovat výjimku. Pokud
při provádění tohoto kódu nastane
výjimečná situace, provedení kódu
se nezastaví, ale přejde do kódu bloku
except. V tomto bloku by měl být
napsán výpis zprávy, co nejpřesněji
popisující podstatu vzniklé chyby.
Pokud při provádění bloku try
nenastane žádná výjimečná situace,
užitečný kód se jednoduše provede a kód
z bloku except - ne.
Pojďme zachytit naši výjimku při přístupu
k neexistujícímu prvku seznamu. K tomu
umístíme do bloku try kód s
potenciální chybou. A v bloku except
zadáme výpis do konzole zprávy 'error:
elem is not exist':
lst = [1, 2, 3]
try:
print(lst[4])
except:
print('error: elem is not exist')
Po provedení kódu se vypíše:
'error: elem is not exist'
Po prostudování konstrukce try-except
by se měl změnit styl vašeho psaného kódu.
Nyní je třeba všechny místa, kde může nastat
výjimečná situace, obalit
try, a v bloku except
popsat reakci na tuto výjimku.
Zeptejte se uživatele na dvě čísla. Vydělte jedno druhým. Zachyťte výjimečnou situaci dělení nulou.
Zeptejte se uživatele na číslo. Najděte druhou odmocninu tohoto čísla. Zachyťte výjimečnou situaci odmocňování záporného čísla.
Je dán seznam. Zeptejte se uživatele na celé číslo. Získejte prvek seznamu, jehož číslo zadal uživatel. Zachyťte výjimečnou situaci, která nastane, pokud uživatel zadal číslo mimo rozsah seznamu.
Je dán následující kód:
num = '5'
res = num + 2
print(res)
Co je s tímto kódem špatně? Opravte jeho nedostatky.
Je dán následující kód:
lst = [1, 2, 3, 4]
def getElem(iter):
print(iter[4])
getElem(lst)
Co je s tímto kódem špatně? Opravte jeho nedostatky.