Mis on Pythoni erand?
Erandiks on viga, mis juhtub programmi käivitamisel. Programmi käitamise ajal genereerib Python siiski erandi, mida tuleks käsitleda, et vältida teie programmi kokkukukkumist. Pythoni keeles käivitavad erandid vead automaatselt või võivad need teie kood käivitada ja kinni pidada.
Erand näitab, et kuigi sündmus võib juhtuda, juhtub seda tüüpi sündmusi harva. Kui meetod ei suuda erandit käsitleda, visatakse see oma helistajafunktsiooni. Lõpuks, kui erand põhifunktsioonist välja visatakse, lõpetatakse programm järsult.
Selles Pythoni erakordses käsitsemisõpetuses saate teada:
- Mis on Pythoni erand?
- Erandite tavalised näited
- Miks peaksite kasutama erandeid?
- Erandite reeglid
- Erakordne käitlemismehhanism
- Proovige avaldust
- Püügiaruanne
- Tõuse avaldus
- Olulised Pythoni vead
- Muud olulised Pythoni erandid
- Viga vs erandid
Erandite tavalised näited:
- Nulliga jagamine
- Juurdepääs failile, mida pole olemas.
- Kahe kokkusobimatu tüübi lisamine
- Püütakse juurde pääseda jada olematule indeksile
- Tabeli eemaldamine lahtiühendatud andmebaasiserverist.
- Sularahaautomaadi väljavõtmine rohkem kui saadaval olev summa
Miks peaksite kasutama erandeid?
Siin on Pythonis erandite kasutamise põhjused:
- Erandkäsitlus võimaldab teil veakäsitluskoodi eraldada tavalisest koodist.
- Erandiks on Pythoni objekt, mis tähistab viga.
- Nagu koodikommentaaride puhul, aitavad ka erandid meelde tuletada, mida programm ootab.
- See selgitab koodi ja parandab loetavust.
- Võimaldab stimuleerida tagajärgi, kuna vigade käsitlemine toimub ühes kohas ja ühel viisil.
- Erand on mugav meetod veateadete käsitlemiseks.
- Pythonis saate programmis erandi tõsta, kasutades tõstmise erandi meetodit.
- Erandi suurendamine aitab teil praeguse koodi täitmise katkestada ja tagastab erandi tagasi ootesse, kuni see on käsitletud.
- Töötatakse erandeid komponentidele, mis ei saa nendega otse hakkama.
Erandite reeglid
Siin on mõned Pythoni erandite käsitlemise olulised reeglid:
- Erandiks peavad olema klassiobjektid
- Klasside erandite jaoks võite kasutada proovilauset koos erandlausega, mis mainib konkreetset klassi.
- Isegi kui lause või avaldis on süntaktiliselt õige, võib see kuvada tõrke, kui seda üritatakse täita.
- Hukkamise käigus leitud vigu nimetatakse eranditeks ja need ei ole tingimusteta surmavad.
Erakordne käitlemismehhanism
Erandite haldamist haldavad järgmised 5 märksõna:
- proovige
- saak
- lõpuks
- viskama
Proovige avaldust
Proovilause sisaldab märksõna try, millele järgneb koolon (:) ja koodikomplekt, milles võib esineda erandeid. Sellel on üks või mitu klauslit.
Kui proovivõtte käivitamise ajal erandeid ei toimunud, ignoreerib tõlk selle konkreetse proovilause eranditöötlejaid.
Juhul, kui proovikomplektis esineb mõni erand, aegub proovikomplekt ja programmi juhtimine läheb vastavusse, välja arvatud proovikomplekti järgiv käitleja.
Syntax:try:statement(s)
Püügiaruanne
Püüdmisblokid võtavad korraga ühe argumendi, mis on seda tüüpi erand, mille ta tõenäoliselt tabab. Need argumendid võivad ulatuda konkreetsest erandiliigist, mida saab muuta kõikehõlmavate erandite kategooriasse.
Püügiploki reeglid:
- Püügiploki saate määratleda märksõna saak abil
- Saagi erandi parameeter on alati sulgudes
- See tähistab alati eranditüüpi, mida püüdeplokk käsitseb.
- Erandi käitlemise kood on kirjutatud kahe {} lokkis klambri vahele.
- Ühes proovimisplokis saate paigutada mitu püüdmisplokki.
- Püügiplokki saab kasutada alles pärast prooviblokki.
- Kogu püüdmisplokk tuleks tellida alamklassist superklasside erandini.
Näide:
try}catch (ArrayIndexOutOfBoundsException e) {System.err.printin("Caught first " + e.getMessage()); } catch (IOException e) {System.err.printin("Caught second " + e.getMessage());}
Lõpuks blokeeri
Lõpuks blokeeritakse alati, olenemata visatud erandist. Lõplik märksõna võimaldab teil luua koodiploki, mis järgib proovimise püüdmise plokki.
Lõpuks on klausel vabatahtlik. Selle eesmärk on määratleda puhastustoimingud, mis peaksid toimuma kõikides tingimustes.
try:raise KeyboardInterruptfinally:print 'welcome, world!'OutputWelcome, world!KeyboardInterrupt
Lõpuks, enne proovilause täitmist täidetakse klausel.
Tõuse avaldus
Tõstelause määrab argumendi, mis lähtestab erandi objekti. Siin järgneb komale erandi nimi ja komale järgnev argument või argument.
Süntaks:
raise [Exception [, args [, traceback]]]
Selles süntaksis on argument valikuline ja täitmise ajal pole erandi argumendi väärtus alati ükski.
Näide:
Pythoni erand võib olla mis tahes väärtus, näiteks string, klass, arv või objekt. Enamik neist Pythoni tuuma tõstatatud eranditest on klassid, mille argument on klassi eksemplar.
Olulised Pythoni vead
Veatüüp | Kirjeldus |
Aritmeetiline viga | ArithmeticError toimib kõigi aritmeetiliste erandite baasklassina. Seda tõstatatakse aritmeetiliste toimingute vigade korral. |
ImportError | ImportError tõstetakse üles, kui proovite importida moodulit, mida pole. Selline erand ilmneb juhul, kui olete teinud mooduli nimes või moodulis, mida standardteel pole, tippimisvea. |
IndexError | IndexErroris kerkib ülespoole jääva järjestuse viitamisel. |
KeyError | Kui konkreetset võtit sõnastikust ei leia, tõstetakse KeyError'i erand. |
NimiViga | NimiViga tõuseb, kui nimele viidatakse koodis, mida kohalikus või globaalses nimeruumis kunagi pole. |
ValueError | Väärtusviga tekib siis, kui funktsioon või sisseehitatud operatsioon saab argumendi, mis võib olla õige tüüp, kuid millel pole sobivat väärtust. |
EOFerror | Selline viga tekib siis, kui üks sisseehitatud funktsioonidest (input () või raw_input ()) jõuab andmeid lugemata EOF-i tingimuseni. |
ZeroDivisonError | Seda tüüpi viga, mis tekib siis, kui jagamine või moodul nulliga toimub kõigi numbrite tüüpide korral. |
IOError- | Selline tõrge ilmnes sisendi / väljundi nurjumisel. |
süntaksViga | SyntaxVead ilmnesid, kui Pythoni süntaksis oli viga. |
TaaneViga | See viga ilmnes siis, kui taane pole õigesti määratletud |
Muud olulised Pythoni erandid
Erand | Kirjeldus |
AritmeetikaErand | Aritmeetiline viga, näiteks jagamine nulliga. |
ArraylndexOutOfBoundsException | Massiivide indeks on väljaspool piire. |
ArrayStoreException | Määramine aitab teil sobimatut tüüpi massiivi elementi. |
ClassCastException | Vale ülekanne |
MlegalMonitorStateException | Monitori ebaseaduslik toimimine, nagu lukustamata niidil ootamine. |
MlegalStateException | Keskkond või rakendus on vales olekus. |
ClassNotFoundException | Kursust ei leitud. |
CloneNotSupportedException | Proovige kloonida objekti, mis ei kasuta liidest Cloneable. |
Ebaseaduslik juurdepääsuväli | Kursusele juurdepääs keelatakse. |
InstantiationException | Ilmneb siis, kui proovite luua liidese või abstraktse klassi objekti. |
CloneNotSupportedException | Proovige kloonida objekti, mis ei kasuta liidest. |
Viga vs erandid
Viga | Erandid |
Kõik Pythoni vead on kontrollimata tüüp. | Erandid hõlmavad nii kontrollitud kui ka kontrollimata tüüpi. |
Viga ilmub käitamise ajal, mis kompilaatorile ei olnud teada. | Erandeid on võimalik taastada, kui neid proovida püüdmisplokkide abil. |
Vead on enamasti põhjustatud keskkonnast, kus rakendus töötab. | Rakendus ise põhjustab erandeid. |
Näited: OutofMemoryError | Näited: kontrollitud erandid, SQL-i erand, NullPointerException jne. |
Kokkuvõte
- Erandiks on viga, mis juhtus programmi käivitamisel.
- Erand näitab, et kuigi sündmus võib juhtuda, juhtub seda tüüpi sündmusi harva.
- Tavalised erandinäited on 1) jagamine nulliga, 2) juurdepääs failile, mida pole olemas, 3) kahe ühildumatu tüübi lisamine.
- Erandiks on Pythoni objekt, mis tähistab viga.
- Proovilause sisaldab märksõna try, millele järgneb koolon (:) ja koodikomplekt, milles võib esineda erandeid. Sellel on üks või mitu klauslit.
- Püüdmisblokid võtavad korraga ühe argumendi, mis on seda tüüpi erand, mille ta tõenäoliselt tabab.
- Tõstelause määrab argumendi, mis lähtestab erandi objekti.
- Lõpuks, blokeerimine toimub alati olenemata visatud erandist.