Tässä opetusohjelmassa opit erityyppisistä virheistä ja poikkeuksista, jotka on sisäänrakennettu Pythoniin. Ne nostetaan aina, kun Python-tulkki havaitsee virheitä.
Video: Python-poikkeusten käsittely
Voimme tehdä tiettyjä virheitä kirjoittaessamme ohjelmaa, jotka johtavat virheisiin, kun yritämme suorittaa sen. Python-ohjelma päättyy heti, kun se havaitsee käsittelemättömän virheen. Nämä virheet voidaan yleisesti jakaa kahteen luokkaan:
- Syntaksivirheet
- Loogiset virheet (poikkeukset)
Python-syntaksivirheet
Virhettä, joka johtuu kielen oikean rakenteen (syntaksin) noudattamatta jättämisestä, kutsutaan syntaksivirheeksi tai jäsentämisvirheeksi .
Katsotaanpa yhtä esimerkkiä:
>>> if a < 3 File "", line 1 if a < 3 SyntaxError: invalid syntax
Kuten esimerkissä on esitetty, nuoli osoittaa, mihin jäsennin osui syntaksivirheeseen.
Voimme huomata :
, että if
lausunnossa puuttuu kaksoispiste .
Pythonin loogiset virheet (poikkeukset)
Suorituksen aikana (syntaksitestin läpäisyn jälkeen) esiintyviä virheitä kutsutaan poikkeuksiksi tai loogisiksi virheiksi .
Esimerkiksi niitä esiintyy, kun yritämme avata tiedoston (lukemista varten), jota ei ole ( FileNotFoundError
), yritämme jakaa luku nollalla ( ZeroDivisionError
) tai yrittää tuoda moduulia, jota ei ole ( ImportError
).
Aina kun tällaisia ajonaikaisia virheitä esiintyy, Python luo poikkeusobjektin. Jos sitä ei käsitellä oikein, se tulostaa jäljen tälle virheelle sekä joitakin yksityiskohtia siitä, miksi virhe tapahtui.
Katsotaanpa, kuinka Python kohtelee näitä virheitä:
>>> 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'
Pythonin sisäiset poikkeukset
Laiton toiminta voi aiheuttaa poikkeuksia. Pythonissa on paljon sisäänrakennettuja poikkeuksia, jotka nostetaan vastaavien virheiden tapahtuessa. Voimme tarkastella kaikkia sisäänrakennettuja poikkeuksia sisäänrakennetun local()
toiminnon avulla seuraavasti:
print(dir(locals()('__builtins__')))
locals()('__builtins__')
palauttaa sisäänrakennettujen poikkeusten, toimintojen ja määritteiden moduulin. dir
antaa meille mahdollisuuden luetella nämä määritteet merkkijonoina.
Jotkut yleisistä sisäänrakennetuista Python-ohjelmoinnin poikkeuksista sekä niitä aiheuttavat virheet on lueteltu alla:
Poikkeus | Virheen syy |
---|---|
AssertionError | Nostetaan, kun assert lausunto epäonnistuu. |
AttributeError | Korotetaan, kun määritteen määritys tai viite epäonnistuu. |
EOFError | Korotetaan, kun input() toiminto osuu tiedoston lopun tilaan. |
FloatingPointError | Nostetaan, kun liukulukuoperaatio epäonnistuu. |
GeneratorExit | Nosta, kun close() kutsutaan generaattorin menetelmää. |
ImportError | Nostetaan, kun tuotua moduulia ei löydy. |
IndexError | Korotetaan, kun sekvenssin indeksi on alueen ulkopuolella. |
KeyError | Nostetaan, kun avainta ei löydy sanakirjasta. |
KeyboardInterrupt | Korotetaan, kun käyttäjä osuu keskeytysavaimeen ( Ctrl+C tai Delete ). |
MemoryError | Nostetaan, kun toiminnon muisti loppuu. |
NameError | Nostetaan, kun muuttujaa ei löydy paikallisesta tai globaalista laajuudesta. |
NotImplementedError | Kasvatettu abstrakteilla menetelmillä. |
OSError | Korotettu, kun järjestelmän toiminta aiheuttaa järjestelmään liittyvän virheen. |
OverflowError | Korotetaan, kun aritmeettisen operaation tulos on liian suuri edustettavaksi. |
ReferenceError | Nostetaan, kun heikkoa referenssipalvelinta käytetään jätteen keräämään referenssiin pääsemiseksi. |
RuntimeError | Korotetaan, kun virhe ei kuulu mihinkään muuhun luokkaan. |
StopIteration | next() Toiminnon avulla korotettu ilmaisemaan, että iteraattori ei enää palauta tuotetta. |
SyntaxError | Parseri nosti syntaksivirheen. |
IndentationError | Nostetaan, kun sisennys on väärä. |
TabError | Nostetaan, kun sisennys koostuu epäjohdonmukaisista välilehdistä ja välilyönneistä. |
SystemError | Korotettu, kun tulkki havaitsee sisäisen virheen. |
SystemExit | Korotettu sys.exit() toiminnolla. |
TypeError | Korotetaan, kun toimintoa tai toimintoa käytetään vääräntyyppiseen kohteeseen. |
UnboundLocalError | Korotetaan, kun viitataan paikalliseen muuttujaan toiminnossa tai menetelmässä, mutta mitään muuttujaa ei ole sidottu. |
UnicodeError | Nostetaan, kun tapahtuu Unicode-koodaus- tai dekoodausvirhe. |
UnicodeEncodeError | Nostetaan, kun koodauksen aikana tapahtuu Unicode-virhe. |
UnicodeDecodeError | Nostetaan, kun dekoodauksen aikana tapahtuu Unicode-virhe. |
UnicodeTranslateError | Nostetaan, kun käännöksen aikana tapahtuu Unicode-virhe. |
ValueError | Korotetaan, kun funktio saa oikean tyyppisen mutta väärän arvon argumentin. |
ZeroDivisionError | Korotetaan, kun toinen jako- tai modulo-operaatio on nolla. |
Tarvittaessa voimme määritellä myös omat poikkeuksemme Pythonissa. Lisätietoja niistä on Python-käyttäjän määrittelemissä poikkeuksissa.
Voimme käsitellä näitä sisäänrakennettu ja käyttäjän määrittämiä poikkeuksia Python avulla try
, except
ja finally
lausuntoja. Jos haluat lisätietoja niistä, käy Python-kokeiluprosessissa paitsi lopuksi lausunnoissa.