Selles õpetuses saate teada Pythoni sisseehitatud erinevat tüüpi vigadest ja eranditest. Neid tõstetakse alati, kui Pythoni tõlk kohtab vigu.
Video: Pythoni erandkäsitlus
Saame programmi kirjutades teha teatud vigu, mis viivad vigadeni, kui proovime seda käivitada. Püütoni programm lõpetatakse kohe, kui ilmneb töötlemata viga. Need vead saab üldjoontes jagada kahte klassi:
- Süntaksivead
- Loogikavead (erandid)
Pythoni süntaksivead
Keele õige struktuuri (süntaks) mittejärgimisel tekkinud viga nimetatakse süntaksiveaks või sõelumisveaks .
Vaatame ühte näidet:
>>> if a < 3 File "", line 1 if a < 3 SyntaxError: invalid syntax
Nagu näites näidatud, näitab nool kohta, kus parser sattus süntaksiveale.
Siinkohal võime märgata :
, et if
avalduses puudub koolon .
Pythoni loogilised vead (erandid)
Käitusajal (pärast süntaksitesti läbimist) esinevaid vigu nimetatakse eranditeks või loogikavigadeks .
Näiteks ilmnevad need siis, kui proovime avada faili (lugemiseks), mida pole olemas ( FileNotFoundError
), proovime numbrit jagada nulliga ( ZeroDivisionError
) või importida moodulit, mida pole olemas ( ImportError
).
Alati, kui seda tüüpi käitustõrkeid esineb, loob Python erandi objekti. Kui seda ei käsitleta õigesti, prindib see selle vea jälje koos üksikasjadega selle vea põhjuste kohta.
Vaatame, kuidas Python neid vigu käsitleb:
>>> 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'
Pythoni sisseehitatud erandid
Ebaseaduslikud toimingud võivad tekitada erandeid. Pythonis on palju sisseehitatud erandeid, mis tekivad vastavate vigade ilmnemisel. Kõiki sisseehitatud erandeid saab sisseehitatud local()
funktsiooni abil vaadata järgmiselt:
print(dir(locals()('__builtins__')))
locals()('__builtins__')
tagastab sisseehitatud erandite, funktsioonide ja atribuutide mooduli. dir
võimaldab meil need atribuudid stringidena loetleda.
Allpool on loetletud mõned Pythoni programmeerimisel levinud sisseehitatud erandid koos neid põhjustava veaga:
Erand | Vea põhjus |
---|---|
AssertionError | Tõstatatud, kui mõni assert avaldus ebaõnnestub. |
AttributeError | Tõstetakse, kui atribuudi määramine või viide ebaõnnestub. |
EOFError | Tõstetakse, kui input() funktsioon tabab faili lõpu seisukorda. |
FloatingPointError | Tõstetakse üles, kui ujukomaoperatsioon nurjub. |
GeneratorExit | Tõstke, kui close() kutsutakse generaatori meetodit. |
ImportError | Tõstetakse, kui imporditud moodulit ei leita. |
IndexError | Tõstetakse, kui jada indeks on vahemikust väljas. |
KeyError | Tõstetakse, kui võtit sõnastikust ei leia. |
KeyboardInterrupt | Tõstetakse, kui kasutaja vajutab katkestusklahvi ( Ctrl+C või Delete ). |
MemoryError | Tõstetakse, kui operatsiooni mälu saab otsa. |
NameError | Tõstetakse siis, kui muutujat ei leidu kohalikus ega globaalses ulatuses. |
NotImplementedError | Kasvatatud abstraktsete meetoditega. |
OSError | Tõstetakse, kui süsteemi töö põhjustab süsteemiga seotud tõrke. |
OverflowError | Tõstetakse, kui aritmeetilise operatsiooni tulemus on esitamiseks liiga suur. |
ReferenceError | Tõstetakse üles, kui prügikogutud referendile juurdepääsemiseks kasutatakse nõrka võrdlusproksi. |
RuntimeError | Tõstetakse siis, kui viga ei kuulu ühegi teise kategooria alla. |
StopIteration | next() Funktsiooni järgi tõstetud, et iteraator ei tagastaks enam ühtegi üksust. |
SyntaxError | Parseri poolt tõstatatud, kui ilmneb süntaksiviga. |
IndentationError | Tõstetakse siis, kui on vale taande. |
TabError | Tõstetakse üles, kui taane koosneb vastuolulistest vahelehtedest ja tühikutest. |
SystemError | Tõstetakse, kui tõlk tuvastab sisemise vea. |
SystemExit | sys.exit() Funktsiooni järgi tõstetud . |
TypeError | Tõstetakse üles, kui vale tüüpi objektile rakendatakse funktsiooni või toimingut. |
UnboundLocalError | Tõstetakse, kui funktsioonis või meetodis viidatakse kohalikule muutujale, kuid selle muutujaga pole seotud ühtegi väärtust. |
UnicodeError | Tõstetakse, kui ilmneb Unicode'iga seotud kodeerimis- või dekodeerimisviga. |
UnicodeEncodeError | Tõstatatakse, kui kodeerimisel ilmneb Unicode'iga seotud tõrge. |
UnicodeDecodeError | Tõstatatakse, kui dekodeerimise ajal ilmneb Unicode'iga seotud tõrge. |
UnicodeTranslateError | Tõstatatakse, kui tõlkimisel ilmneb Unicode'iga seotud tõrge. |
ValueError | Tõstetakse üles, kui funktsioon saab õiget tüüpi, kuid vale väärtusega argumendi. |
ZeroDivisionError | Tõstetakse, kui jagamise või modulo operatsiooni teine operand on null. |
Vajadusel saame Pythonis määratleda ka oma erandid. Nende kohta lisateabe saamiseks külastage Pythoni kasutaja määratletud erandeid.
Saame hakkama neid sisse ehitatud ja kasutaja määratletud erandeid Python kasutades try
, except
ja finally
avaldused. Nende kohta lisateabe saamiseks külastage Pythoni proovimist, välja arvatud ja lõpuks avaldused.