V tomto tutoriáli sa dozviete o rôznych druhoch chýb a výnimkách, ktoré sú zabudované do Pythonu. Sú vyvolané vždy, keď tlmočník Pythonu narazí na chyby.
Video: Spracovanie výnimiek Pythonu
Pri písaní programu môžeme urobiť určité chyby, ktoré pri pokuse o jeho spustenie vedú k chybám. Program python sa ukončí, akonáhle narazí na neošetrenú chybu. Tieto chyby možno zhruba rozdeliť do dvoch tried:
- Syntaxové chyby
- Logické chyby (výnimky)
Chyby syntaxe Pythonu
Chyba spôsobená nedodržiavaním správnej štruktúry (syntaxe) jazyka sa nazýva syntaktická chyba alebo syntaktická chyba .
Pozrime sa na jeden príklad:
>>> if a < 3 File "", line 1 if a < 3 SyntaxError: invalid syntax
Ako je znázornené v príklade, šípka označuje, kde syntaktický analyzátor narazil na syntaktickú chybu.
Tu si môžeme všimnúť, že :
vo if
výpise chýba dvojbodka .
Logické chyby v Pythone (výnimky)
Chyby, ktoré sa vyskytnú za behu programu (po absolvovaní testu syntaxe), sa nazývajú výnimky alebo logické chyby .
Napríklad k nim dôjde, keď sa pokúsime otvoriť súbor (na čítanie), ktorý neexistuje ( FileNotFoundError
), pokúsime sa vydeliť číslo nulou ( ZeroDivisionError
) alebo sa pokúsime importovať modul, ktorý neexistuje ( ImportError
).
Kedykoľvek dôjde k týmto typom runtime chýb, Python vytvorí objekt výnimky. Ak nie je spracovaná správne, vytlačí spätné sledovanie tejto chyby spolu s niektorými podrobnosťami o tom, prečo k tejto chybe došlo.
Pozrime sa, ako Python zaobchádza s týmito chybami:
>>> 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'
Vstavané výnimky pre Python
Nezákonné operácie môžu spôsobiť výnimky. V Pythone je veľa zabudovaných výnimiek, ktoré sa vyvolajú, keď sa vyskytnú príslušné chyby. Všetky zabudované výnimky môžeme zobraziť pomocou zabudovanej local()
funkcie takto:
print(dir(locals()('__builtins__')))
locals()('__builtins__')
vráti modul zabudovaných výnimiek, funkcií a atribútov. dir
umožňuje nám uviesť tieto atribúty ako reťazce.
Niektoré z bežných zabudovaných výnimiek v programovaní v Pythone spolu s chybou, ktorá ich spôsobuje, sú uvedené nižšie:
Výnimka | Príčina chyby |
---|---|
AssertionError | Zvýšené, keď assert vyhlásenie zlyhá. |
AttributeError | Zvýšené, keď zlyhá priradenie alebo odkaz na atribút. |
EOFError | Zvýšené, keď input() funkcia dosiahne stav konca súboru. |
FloatingPointError | Zvýšené, keď operácia s pohyblivou rádovou čiarkou zlyhá. |
GeneratorExit | Zvýšiť, keď close() sa volá metóda generátora . |
ImportError | Zvýšené, keď sa nenájde importovaný modul. |
IndexError | Vyvolá sa, keď je index sekvencie mimo rozsahu. |
KeyError | Vyzdvihnuté, keď sa kľúč nenájde v slovníku. |
KeyboardInterrupt | Zvýšené, keď používateľ stlačí kláves prerušenia ( Ctrl+C alebo Delete ). |
MemoryError | Vyvolá sa, keď operácii dôjde pamäť. |
NameError | Vyvolá sa, keď sa premenná nenájde v miestnom alebo globálnom rozsahu. |
NotImplementedError | Vyvinuté abstraktnými metódami. |
OSError | Zvýšené, keď prevádzka systému spôsobí chybu súvisiacu so systémom. |
OverflowError | Vyvolá sa, keď je výsledok aritmetickej operácie príliš veľký na to, aby sa dal reprezentovať. |
ReferenceError | Vyvolá sa, keď sa na prístup k referentovi zbieraného odpadu použije slabý referenčný proxy server. |
RuntimeError | Vyvoláva sa, keď chyba nespadá do žiadnej inej kategórie. |
StopIteration | Zvýšené o next() funkciu, ktorá označuje, že iterátor už nemá vrátiť žiadnu ďalšiu položku. |
SyntaxError | Zvýšené syntaktickým analyzátorom, keď sa vyskytne syntaktická chyba. |
IndentationError | Vyvolá sa, ak dôjde k nesprávnemu odsadeniu. |
TabError | Vyvolá sa, keď odsadenie pozostáva z nekonzistentných tabulátorov a medzier. |
SystemError | Zvýšené, keď tlmočník zistí vnútornú chybu. |
SystemExit | Zvýšené sys.exit() funkciou. |
TypeError | Vyvolané, keď sa funkcia alebo operácia použije na objekt nesprávneho typu. |
UnboundLocalError | Vyvolá sa, keď sa vo funkcii alebo metóde odkazuje na lokálnu premennú, ale na túto premennú nebola naviazaná žiadna hodnota. |
UnicodeError | Vyvoláva sa, keď dôjde k chybe kódovania alebo dekódovania súvisiacej s Unicode. |
UnicodeEncodeError | Vyvoláva sa, keď sa počas kódovania vyskytne chyba súvisiaca s kódom Unicode. |
UnicodeDecodeError | Vyvoláva sa, keď sa počas dekódovania vyskytne chyba súvisiaca s Unicode. |
UnicodeTranslateError | Zobrazuje sa, keď sa pri prekladaní vyskytne chyba súvisiaca s kódom Unicode. |
ValueError | Vyvolané, keď funkcia získa argument správneho typu, ale nesprávnej hodnoty. |
ZeroDivisionError | Vyvolá sa, keď je druhý operand rozdelenia alebo operácie modulo nulový. |
Ak je to potrebné, môžeme v Pythone definovať aj naše vlastné výnimky. Ak sa o nich chcete dozvedieť viac, navštívte Výnimky definované používateľom Pythonu.
Tieto zabudované a používateľom definované výnimky môžeme v Pythone spracovať pomocou príkazov try
, except
a finally
. Ak sa chcete o nich dozvedieť viac, navštívte príkazy python try, except a nakoniec.