U ovom vodiču naučit ćete o različitim vrstama pogrešaka i iznimkama koje su ugrađene u Python. Oni se podižu kad god Python interpreter naiđe na pogreške.
Video: Rukovanje iznimkama Pythona
Tijekom pisanja programa možemo napraviti određene pogreške koje dovode do pogrešaka kada ga pokušamo pokrenuti. Program python prestaje čim naiđe na neobrađenu pogrešku. Te se pogreške mogu široko klasificirati u dvije klase:
- Sintaksne pogreške
- Logičke pogreške (iznimke)
Pogreške u sintaksi Pythona
Pogreška uzrokovana nepridržavanjem odgovarajuće strukture (sintakse) jezika naziva se sintaksna pogreška ili pogreška raščlanjivanja .
Pogledajmo jedan primjer:
>>> if a < 3 File "", line 1 if a < 3 SyntaxError: invalid syntax
Kao što je prikazano u primjeru, strelica pokazuje gdje je parser naišao na sintaksnu pogrešku.
Ovdje možemo primijetiti da :
u if
izjavi nedostaje debelo crijevo .
Python logičke pogreške (iznimke)
Pogreške koje se javljaju u vrijeme izvođenja (nakon prolaska testa sintakse) nazivaju se iznimkama ili logičkim pogreš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 pogrešaka, Python stvara objekt iznimke. Ako se s njime ne postupa ispravno, ispisuje se praćenje te pogreške zajedno s nekim pojedinostima o tome zašto je došlo do te pogreške.
Pogledajmo kako Python tretira ove pogreške:
>>> 1 / 0 Traceback (most recent call last): File "", line 301, in runcode File "", line 1, in ZeroDivisionError: division by zero >>> open("imaginary.txt") Traceback (most recent call last): File "", line 301, in runcode File "", line 1, in FileNotFoundError: (Errno 2) No such file or directory: 'imaginary.txt'
Ugrađene iznimke u Pythonu
Ilegalne operacije mogu stvoriti iznimke. Puno je ugrađenih iznimaka u Pythonu koji se pojavljuju kada se pojave odgovarajuće pogreške. Sve ugrađene iznimke možemo pregledati pomoću ugrađene local()
funkcije kako slijedi:
print(dir(locals()('__builtins__')))
locals()('__builtins__')
vratit će modul ugrađenih iznimaka, funkcija i atributa. dir
omogućuje nam da ove atribute navedemo kao nizove.
Neke od uobičajenih ugrađenih iznimki u programiranju na Pythonu, zajedno s pogreškama koje ih uzrokuju, navedene su u nastavku:
Iznimka | Uzrok pogreške |
---|---|
AssertionError | Podignuta kad assert izjava ne uspije. |
AttributeError | Povećava se kada dodjela atributa ili referenca ne uspije. |
EOFError | Povećava se kada input() funkcija postigne stanje na kraju datoteke. |
FloatingPointError | Povećava se kada operacija s pomičnim zarezom ne uspije. |
GeneratorExit | Povećajte kada close() se pozove metoda generatora . |
ImportError | Povećava se kada uvezeni modul nije pronađen. |
IndexError | Povećava se kada je indeks niza izvan opsega. |
KeyError | Podignut kad ključ nije pronađen u rječniku. |
KeyboardInterrupt | Povećava se kada korisnik pritisne tipku za prekidanje ( Ctrl+C ili Delete ). |
MemoryError | Povećava se kad operaciji ponestane memorije. |
NameError | Povećava se kada varijabla nije pronađena u lokalnom ili globalnom opsegu. |
NotImplementedError | Odgojeno apstraktnim metodama. |
OSError | Povećava se kada rad sustava uzrokuje pogrešku povezanu sa sustavom. |
OverflowError | Povećava se kada je rezultat aritmetičke operacije prevelik da bi se mogao prikazati. |
ReferenceError | Povećava se kada se koristi slabi referentni proxy za pristup referentu prikupljenog smeća. |
RuntimeError | Povećava se kada pogreška ne spada u nijednu drugu kategoriju. |
StopIteration | Povišen next() funkcijom da označi da iterator nema daljnju stavku koju će vratiti. |
SyntaxError | Povišen parserom kada se naiđe na sintaksnu pogrešku. |
IndentationError | Podignuto kad postoji pogrešno uvlačenje. |
TabError | Povećava se kada se uvlačenje sastoji od nedosljednih kartica i razmaka. |
SystemError | Povećava se kada tumač otkrije unutarnju pogrešku. |
SystemExit | Podignuto sys.exit() funkcijom. |
TypeError | Povećava se kada se funkcija ili operacija primijeni na objekt pogrešnog tipa. |
UnboundLocalError | Povećava se kada se uputi na lokalnu varijablu u funkciji ili metodi, ali nijedna vrijednost nije vezana za tu varijablu. |
UnicodeError | Povećava se kada se dogodi pogreška kodiranja ili dekodiranja povezana s Unicodeom. |
UnicodeEncodeError | Povećava se kada se tijekom kodiranja dogodi pogreška povezana s Unicodeom. |
UnicodeDecodeError | Povećava se kada se tijekom dekodiranja dogodi pogreška povezana s Unicodeom. |
UnicodeTranslateError | Povećava se kada se tijekom prevođenja dogodi pogreška povezana s Unicodeom. |
ValueError | Povećava se kada funkcija dobije argument ispravnog tipa, ali neprimjerene vrijednosti. |
ZeroDivisionError | Povećava se kada je drugi operand dijeljenja ili modulo operacija nula. |
Ako je potrebno, također možemo definirati vlastite iznimke u Pythonu. Da biste saznali više o njima, posjetite Python Korisnički definirane iznimke.
Mi može nositi ove ugrađene i korisnički definirane iznimke u Pythonu koristeći try
, except
i finally
izjave. Da biste saznali više o njima, posjetite Python try, osim i konačno izjave.