Python - Greške i ugrađeni izuzeci (Errors and Built-in Exceptions)


Prilikom pisanja programa možemo napraviti određene greške koje dovode do grešaka kada ga pokušamo pokrenuti. Python program se završava čim naiđe na neobrađenu grešku. Te se greške mogu široko klasifikovati u dvije klase:

  1. Sintaksne greške
  2. Logičke greške (izuzeci)


Greške u sintaksi Pythona

Greška uzrokovana nepridržavanjem odgovarajuće strukture (sintakse) jezika naziva se sintaksna greška ili greška raščlanjivanja. Pogledajmo jedan primjer:

>>> if a < 3
  File "<interactive input>", line 1
    if a < 3
           ^
SyntaxError: invalid syntax

Kao što je prikazano u primjeru, strelica pokazuje gdje je naišao na sintaksnu grešku. Ovdje možemo primijetiti da u naredbi if nedostaje dvotačka :.



Python logičke greške (izuzeci)

Greške koje se javljaju u vrijeme izvođenja (nakon prolaska testa sintakse) nazivaju se izuzecima ili logičkim greškama. Na primjer, javljaju se kada pokušavamo otvoriti datoteku (za čitanje) koja ne postoji (FileNotFoundError), pokušati podijeliti broj s nulom (ZeroDivisionError) ili pokušati uvesti modul koji ne postoji (ImportError).

Kad god se pojave ove vrste runtime grešaka, Python kreira objekt izuzetka. Ako se ne rukuje ispravno, ispisuje povratne greške do te greške, zajedno s nekim detaljima o tome zašto je došlo do te pogreške. Pogledajmo kako Python tretira ove greške:

>>> 1 / 0
Traceback (most recent call last):
 File "<string>", line 301, in runcode
 File "<interactive input>", line 1, in <module>
ZeroDivisionError: division by zero

>>> open("imaginary.txt")
Traceback (most recent call last):
 File "<string>", line 301, in runcode
 File "<interactive input>", line 1, in <module>
FileNotFoundError: [Errno 2] No such file or directory: 'imaginary.txt'


Python ugrađeni izuzeci (Built-in Exceptions)

Ilegalne operacije mogu stvoriti izuzetke. Puno je ugrađenih izuzetaka u Pythonu koji se pojavljuju kada se pojave odgovarajuće greške. Sve ugrađene izuzetke možemo pregledati pomoću ugrađene funkcije local() na sljedeći način:

print(dir(locals()['__builtins__']))

local()['__ builtins__'] vratiće modul ugrađenih izuzetaka, funkcija i atributa. dir nam omogućava da ove atribute navedemo kao stringove. U nastavku su navedeni neki od uobičajenih ugrađenih izuzetaka u programiranju u Pythonu, zajedno s greškama koje ih uzrokuju:

Izuzetak Uzrok greške
AssertionError Dešava se kada izjava o tvrdnji ne uspije.
AttributeError Dešava se kada dodjela atributa ili referenca ne uspije.
EOFError Dešava se kada funkcija input() postigne stanje na kraju datoteke.
FloatingPointError Dešava se kada operacija s pomičnom zarezom (floating point) ne uspije.
GeneratorExit Dešava se kada pozove metoda close() generatora.
ImportError Dešava se kada uvezeni modul nije pronađen.
IndexError Dešava se kada je indeks niza izvan opsega.
KeyError Dešava se kada ključ nije pronađen u rječniku.
KeyboardInterrupt Dešava se kada korisnik pritisne tipku za prekid (Ctrl+C ili Delete).
MemoryError Dešava se kad operaciji ponestane memorije.
NameError Dešava se kada varijabla nije pronađena u lokalnom ili globalnom opsegu.
NotImplementedError Odgojeno apstraktnim metodama.
OSError Dešava se kada rad sistema uzrokuje sistemsku grešku.
OverflowError Dešava se kada je rezultat aritmetičke operacije prevelik da bi ga se moglo predstaviti.
ReferenceError Dešava se kada se koristi slabi referentni proxy za pristup referentu garbage collected.
RuntimeError Dešava se kada greška ne spada u nijednu drugu kategoriju.
StopIteration Povišen funkcijom next() kako bi naznačio da iterator nema daljnju stavku koju će vratiti.
SyntaxError Dešava se kada parserom naiđe na sintaksnu grešku.
IndentationError Dešava se kada postoji pogrešno uvlačenje.
TabError Dešava se kada se uvlačenje sastoji od nedosljednih kartica i razmaka.
SystemError Dešava se kada tumač otkrije unutrašnju grešku.
SystemExit Podignuto funkcijom sys.exit().
TypeError Dešava se kada se funkcija ili operacija primijeni na objekt pogrešnog tipa.
UnboundLocalError Dešava se kada se uputi na lokalnu varijablu u funkciji ili metodi, ali nijedna vrijednost nije vezana za tu varijablu.
UnicodeError Dešava se kada se dogodi greška u kodiranju ili dekodiranju u vezi sa Unicodeom.
UnicodeEncodeError Dešava se kada se tokom kodiranja dogodi greška povezana sa Unicodeom.
UnicodeDecodeError Dešava se kada se tokom dekodiranja dogodi greška povezana sa Unicodeom.
UnicodeTranslateError Dešava se kada se tokom prevođenja dogodi greška povezana sa Unicodeom.
ValueError Dešava se kada funkcija dobije argument ispravnog tipa, ali neprimjerene vrijednosti.
ZeroDivisionError Dešava se kada je drugi operand podjele ili modul operacija nula.

Ako je potrebno, možemo definisati vlastite izuzetke u Pythonu. Da biste saznali više o njima, posjetite lekciju Python korisnički definisani izuzeci. S ovim ugrađenim i korisnički definisanim izuzecima u Pythonu možemo se nositi pomoću izjava try, except i, finally. Da biste saznali više o njima, posjetite lekciju Python try, except i finally izjave.