Zachytávanie výnimiek v Python

V Pythone v porovnaní s inými programovacími jazykmi existuje veľmi veľa situácií, ktoré spôsobujú výnimky.

Poďme si ich podrobnejšie rozobrať. Majme zoznam:

pythonlst = [1, 2, 3]

Prístup k neexistujúcemu prvku zoznamu:

pythonprint(lts[4])

Po vykonaní kódu sa zobrazí chyba (výnimka):

errorIndexError: list index out of range

Ak potrebujeme pokračovať v práci bez zobrazenia výnimky, mali by sme ju zachytiť pomocou konštrukcie try-except. Má nasledujúcu syntax:

pythontry:
  # kód, ktorý spôsobuje výnimku
except:
  # spracovanie chyby

V bloku try by mal byť umiestnený kód, ktorý môže obsahovať výnimku. Ak pri vykonávaní tohto kódu dôjde k výnimočnej situácii, vykonávanie kódu sa nezastaví, ale prejde do kódu bloku except. V tomto bloku by sa mal uviesť výpis správy, ktorý čo najpresnejšie popisuje podstatu nastalej chyby.

Ak pri vykonávaní bloku try nastane nejaká výnimočná situácia, užitočný kód sa jednoducho vykoná a kód z bloku except - nie.

Poďme zachytiť našu výnimku pri prístupe k neexistujúcemu prvku zoznamu. Pre toto v bloku try umiestnime kód s potenciálnou chybou. A v bloku except zadajme výpis do konzoly správy 'error: elem is not exist':

pythonlst = [1, 2, 3]
try:
  print(lst[4])
except:
  print('error: elem is not exist')

Po vykonaní kódu sa vypíše:

python'error: elem is not exist'

Po preštudovaní konštrukcie try-except by sa mal zmeniť štýl vášho napísaného kódu. Teraz všetky miesta, kde môže nastať výnimočná situácia, treba obaliť do try a v bloku except uviesť reakciu na túto výnimku.

Задание 1

Opýtajte sa používateľa na dve čísla. Vydeľte jedno druhým. Zachyťte výnimočnú situáciu delenia nulou.

Задание 2

Opýtajte sa používateľa na číslo. Nájdite druhú odmocninu z tohto čísla. Zachyťte výnimočnú situáciu odmocňovania záporného čísla.

Задание 3

Daný zoznam. Opýtajte sa používateľa na celé číslo. Získajte prvok zoznamu, ktorého index zadal používateľ. Zachyťte výnimočnú situáciu, ktorá nastane, ak používateľ zadal číslo mimo rozsahu zoznamu.

Задание 4

Daný nasledujúci kód:

pythonnum = '5'
res = num + 2

print(res)

Čo je nesprávne s týmto kódom? Opravte jeho nedostatky.

Задание 5

Daný nasledujúci kód:

pythonlst = [1, 2, 3, 4]

def getElem(iter):
  print(iter[4])

getElem(lst)

Čo je nesprávne s týmto kódom? Opravte jeho nedostatky.