V tej vadnici boste spoznali različne vrste napak in izjem, ki so vgrajene v Python. Povišajo se, kadar tolmač Python naleti na napake.
Video: Obravnava izjem Python
Med pisanjem programa lahko naredimo določene napake, ki vodijo do napak, ko ga poskušamo zagnati. Program python se konča takoj, ko naleti na neobdelano napako. Te napake lahko na splošno razvrstimo v dva razreda:
- Sintaksne napake
- Logične napake (izjeme)
Napake v sintaksi Python
Napaka, ki nastane zaradi neupoštevanja ustrezne strukture (sintakse) jezika, se imenuje sintaksna napaka ali napaka pri razčlenjevanju .
Oglejmo si en primer:
>>> if a < 3 File "", line 1 if a < 3 SyntaxError: invalid syntax
Kot je prikazano v primeru, puščica označuje, kje je razčlenjevalnik naletel na sintaksno napako.
Tu lahko opazimo, da :
v if
izjavi manjka debelo črevo .
Logične napake Pythona (izjeme)
Napake, ki se pojavijo med izvajanjem (po opravljenem preizkusu skladnje), se imenujejo izjeme ali logične napake .
Na primer, pojavijo se, ko poskušamo odpreti datoteko (za branje), ki ne obstaja ( FileNotFoundError
), poskusimo deliti število z ničlo ( ZeroDivisionError
) ali poskusiti uvoziti modul, ki ne obstaja ( ImportError
).
Kadar se pojavijo te vrste napak med izvajanjem, Python ustvari objekt izjeme. Če se z njo ne ravna pravilno, natisne sled do te napake in nekaj podrobnosti o tem, zakaj je prišlo do napake.
Poglejmo, kako Python obravnava te napake:
>>> 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'
Python vgrajene izjeme
Ilegalne operacije lahko povzročijo izjeme. V Pythonu je vgrajenih izjem, ki nastanejo, ko pride do ustreznih napak. Vse vgrajene izjeme si lahko ogledamo z uporabo vgrajene local()
funkcije, kot sledi:
print(dir(locals()('__builtins__')))
locals()('__builtins__')
vrne modul vgrajenih izjem, funkcij in atributov. dir
nam omogoča, da te atribute navedemo kot nize.
Nekatere pogoste vgrajene izjeme v programiranju Python in napake, ki jih povzročajo, so navedene spodaj:
Izjema | Vzrok napake |
---|---|
AssertionError | Dvigne se, ko assert izjava ne uspe. |
AttributeError | Zviša se, kadar dodelitev ali sklic atributa ne uspe. |
EOFError | Zviša se, ko input() funkcija doseže stanje konca datoteke. |
FloatingPointError | Zviša se, ko operacija s plavajočo vejico ne uspe. |
GeneratorExit | Dvignite, ko close() se pokliče metoda generatorja . |
ImportError | Zviša se, ko uvoženega modula ni mogoče najti. |
IndexError | Zviša se, ko je indeks zaporedja zunaj obsega. |
KeyError | Dvigne se, če ključa v slovarju ni mogoče najti. |
KeyboardInterrupt | Zviša se, ko uporabnik pritisne tipko za prekinitev ( Ctrl+C ali Delete ). |
MemoryError | Poviša se, ko operaciji zmanjka pomnilnika. |
NameError | Poviša se, če spremenljivke ni mogoče najti v lokalnem ali globalnem obsegu. |
NotImplementedError | Vzgojeno z abstraktnimi metodami. |
OSError | Poviša se, ko delovanje sistema povzroči sistemsko napako. |
OverflowError | Zviša se, če je rezultat aritmetične operacije prevelik, da bi ga lahko predstavili. |
ReferenceError | Poviša se, ko se za dostop do referenca, zbranega smeti, uporablja šibki referenčni strežnik proxy. |
RuntimeError | Poveča se, če napaka ne spada v nobeno drugo kategorijo. |
StopIteration | Dvignjeno s next() funkcijo, ki označuje, da iterator ne vrne nobenega drugega elementa. |
SyntaxError | Dvignil razčlenjevalnik, ko je prišlo do napake v sintaksi. |
IndentationError | Dvignjeno, če je napačna vdolbina. |
TabError | Poviša se, če je zamik sestavljen iz neskladnih zavihkov in presledkov. |
SystemError | Poviša se, ko tolmač zazna notranjo napako. |
SystemExit | Dvignjeno glede na sys.exit() funkcijo. |
TypeError | Poviša se, če je funkcija ali operacija uporabljena za objekt napačnega tipa. |
UnboundLocalError | Zviša se, ko se v funkciji ali metodi sklicuje na lokalno spremenljivko, vendar na to spremenljivko ni vezana nobena vrednost. |
UnicodeError | Poviša se, ko pride do napake kodiranja ali dekodiranja, povezane z Unicode. |
UnicodeEncodeError | Poveča se, ko med kodiranjem pride do napake, povezane z Unicode. |
UnicodeDecodeError | Poveča se, ko med dekodiranjem pride do napake, povezane z Unicode. |
UnicodeTranslateError | Poveča se, ko med prevajanjem pride do napake, povezane z Unicode. |
ValueError | Zviša se, ko funkcija dobi argument pravilnega tipa, vendar nepravilne vrednosti. |
ZeroDivisionError | Zviša se, ko je drugi operand delitve ali modulo nič. |
Po potrebi lahko v Pythonu določimo tudi lastne izjeme. Če želite izvedeti več o njih, obiščite Python uporabniško določene izjeme.
Lahko ročaj to vgrajeno in uporabniku opredeljene izjeme v Python z uporabo try
, except
in finally
izjave. Če želite izvedeti več o njih, obiščite Python, razen stavkov in na koncu.