Olemme tutkineet peruspythonia tähän asti sarjasta 1 - 4 ( Sarja 1 | Sarja 2 | Sarja 3 | Sarja 4 ).
Tässä artikkelissa keskustelemme siitä, kuinka käsitellä poikkeuksia Pythonissa käyttämällä try, paitsi ja lopuksi lauseita oikeiden esimerkkien avulla.
Pythonin virheitä voi olla kahta tyyppiä, ts. Syntaksivirheet ja poikkeukset . Virheet ovat ohjelman ongelmia, joiden vuoksi ohjelma pysäyttää suorituksen. Toisaalta poikkeuksia syntyy, kun tapahtuu sisäisiä tapahtumia, jotka muuttavat ohjelman normaalia kulkua.
Erityyppiset poikkeukset pythonissa:
Pythonissa on useita sisäänrakennettuja Python-poikkeuksia, jotka voidaan nostaa esiin, kun ohjelman suorituksen aikana tapahtuu virhe. Tässä on joitain yleisimmistä Pythonin poikkeustyypeistä:
- Syntaksivirhe: Tämä poikkeus syntyy, kun tulkki havaitsee koodissa syntaksivirheen, kuten väärin kirjoitetun avainsanan, puuttuvan kaksoispisteen tai epätasapainoisen sulkumerkin.
- Tyyppivirhe : Tämä poikkeus syntyy, kun toimintoa tai funktiota sovelletaan väärän tyyppiseen objektiin, kuten merkkijonon lisääminen kokonaislukuun.
- NameError : Tämä poikkeus syntyy, kun muuttujan tai funktion nimeä ei löydy nykyisestä laajuudesta.
- IndexError : Tämä poikkeus korostuu, kun indeksi on luettelon, monikon tai muun sekvenssityypin alueen ulkopuolella.
- KeyError : Tämä poikkeus korostuu, kun avainta ei löydy sanakirjasta.
- ValueError : Tämä poikkeus syntyy, kun funktiota tai menetelmää kutsutaan virheellisellä argumentilla tai syötteellä, esimerkiksi yritetään muuntaa merkkijono kokonaisluvuksi, kun merkkijono ei edusta kelvollista kokonaislukua.
- AttributeError : Tämä poikkeus syntyy, kun attribuuttia tai menetelmää ei löydy objektista, esimerkiksi yritetään käyttää luokkainstanssin olematonta attribuuttia.
- IOError : Tämä poikkeus syntyy, kun I/O-toiminto, kuten tiedoston lukeminen tai kirjoittaminen, epäonnistuu syöttö-/tulostusvirheen vuoksi.
- ZeroDivisionError : Tämä poikkeus korostuu, kun luku yritetään jakaa nollalla.
- Tuontivirhe : Tämä poikkeus syntyy, kun tuontikäsky ei löydä tai lataa moduulia.
Nämä ovat vain muutamia esimerkkejä monista poikkeuksista, joita Pythonissa voi esiintyä. On tärkeää käsitellä koodin poikkeuksia oikein käyttämällä try-except-lohkoja tai muita virheenkäsittelytekniikoita, jotta virheet voidaan käsitellä sulavasti ja estää ohjelman kaatuminen.
Syntaksivirheen ja poikkeusten välinen ero
Syntaksivirhe: Kuten nimestä voi päätellä, tämä virhe johtuu koodin väärästä syntaksista. Se johtaa ohjelman lopettamiseen.
Esimerkki:
Koodissa on syntaksivirhe. The ' if'> lauseen jälkeen tulee kaksoispiste (:>), ja ' print'> lausekkeen tulee olla sisennettynä ' if'> lohko.
Python 3
amount>=> 10000> if>(amount>>> print>(>'You are eligible to purchase Dsa Self Paced'>)> |
>
>
Lähtö:

Poikkeukset: Poikkeuksia syntyy, kun ohjelma on syntaktisesti oikein, mutta koodi aiheuttaa virheen. Tämä virhe ei pysäytä ohjelman suorittamista, mutta se muuttaa ohjelman normaalia kulkua.
Esimerkki:
Tässä koodissa a s jaamme 'merkit' nollalla, joten tapahtuu virhe, joka tunnetaan nimellä 'ZeroDivisionError'
Python 3
marks>=> 10000> a>=> marks>/> 0> print>(a)> |
>
>
Lähtö:

Yllä olevassa esimerkissä nostettiin ZeroDivisionError, kun yritämme jakaa luvun nollalla.
Huomautus: Poikkeus on perusluokka kaikille Pythonin poikkeuksille. Voit tarkistaa poikkeushierarkian tässä .
Esimerkki:
1) TypeError: Tämä poikkeus syntyy, kun toimintoa tai funktiota sovelletaan väärän tyyppiseen objektiin. Tässä on esimerkki:
Tässä a 'Tyyppivirhe' nostetaan, koska molemmat tietotyypit ovat erilaisia, joita lisätään.
Python 3
x>=> 5> y>=> 'hello'> z>=> x>+> y> |
>
>
output: Traceback (most recent call last): File '7edfa469-9a3c-4e4d-98f3-5544e60bff4e.py', line 4, in z = x + y TypeError: unsupported operand type(s) for +: 'int' and 'str'>
yritä catch block ratkaista se:
Koodi yrittää lisätä kokonaisluvun ( ' x'> ) ja merkkijono ( ' y'> ) yhdessä, mikä ei ole kelvollinen operaatio, ja se nostaa a ' TypeError'> . Koodia käytettiin a ' try'> ja ' except'> estää tämän poikkeuksen havaitsemiseksi ja virheilmoituksen tulostamiseksi.
Python 3
x>=> 5> y>=> 'hello'> try>:> >z>=> x>+> y> except> TypeError:> >print>(>'Error: cannot add an int and a str'>)> |
>
>Lähtö
Error: cannot add an int and a str>
Kokeile ja poikkea -lausunto – poikkeukset
Kokeile ja paitsi -lauseita käytetään Pythonin poikkeuksien sieppaamiseen ja käsittelemiseen. Lausekkeet, jotka voivat aiheuttaa poikkeuksia, säilytetään try-lauseen sisällä ja poikkeuksen käsittelevät käskyt kirjoitetaan paitsi lausekkeen sisään.
Esimerkki: Tässä yritämme päästä käsiksi taulukkoelementtiin, jonka indeksi on sidottu, ja käsitellä vastaavaa poikkeusta.
Python 3
a>=> [>1>,>2>,>3>]> try>:> >print> (>'Second element = %d'> %>(a[>1>]))> >print> (>'Fourth element = %d'> %>(a[>3>]))> except>:> >print> (>'An error occurred'>)> |
>
>Lähtö
Second element = 2 An error occurred>
Yllä olevassa esimerkissä lauseet, jotka voivat aiheuttaa virheen, sijoitetaan try-lauseen sisään (tapauksessamme toinen print-lause). Toinen tulostuskäsky yrittää päästä luettelon neljänteen elementtiin, jota ei ole olemassa, ja tämä aiheuttaa poikkeuksen. Tämä poikkeus jää sitten poikkeuslausekkeen piiriin.
lajittele arraylist javassa
Erityinen poikkeus
Try-lauseessa voi olla useampi kuin yksi paitsi lauseke, joka määrittää käsittelijät eri poikkeuksille. Huomaa, että korkeintaan yksi käsittelijä suoritetaan. Voimme esimerkiksi lisätä yllä olevaan koodiin IndexError. Yleinen syntaksi tiettyjen poikkeusten lisäämiseksi on:
try: # statement(s) except IndexError: # statement(s) except ValueError: # statement(s)>
Esimerkki: Pythonin erityisten poikkeusten havaitseminen
Koodi määrittelee toiminnon ' fun(a)'> joka laskeeb>syötteen perusteellaa>. Josa>on pienempi kuin 4, se yrittää jakoa nollalla aiheuttaen a ' ZeroDivisionError'> . Koodi kutsuufun(3)>jafun(5)>try-paitsi -lohkon sisällä. Se hoitaaZeroDivisionError>vartenfun(3)>ja tulostaa ZeroDivisionError tapahtui ja käsiteltiin. The ' NameError'> lohkoa ei suoriteta, koska niitä ei ole ' NameError'> poikkeuksia koodissa.
Python 3
def> fun(a):> >if> a <>4>:> >b>=> a>/>(a>->3>)> >print>(>'Value of b = '>, b)> > try>:> >fun(>3>)> >fun(>5>)> except> ZeroDivisionError:> >print>(>'ZeroDivisionError Occurred and Handled'>)> except> NameError:> >print>(>'NameError Occurred and Handled'>)> |
>
>Lähtö
ZeroDivisionError Occurred and Handled>
Jos kommentoit riviä fun(3), tulos on
NameError Occurred and Handled>
Yllä oleva tulos johtuu siitä, että heti kun python yrittää päästä b:n arvoon, tapahtuu NameError.
Kokeile Else Clauseen kanssa
Pythonissa voit käyttää try-except-lohkossa myös else-lausetta, jonka on oltava läsnä kaikkien paitsi lausekkeiden jälkeen. Koodi tulee else-lohkoon vain, jos try-lause ei aiheuta poikkeusta.
Kokeile muulla lausekkeella
Koodi määrittelee toiminnon AbyB(a, b)> joka laskeec>kuten ((a+b) / (a-b)) ja käsittelee potentiaaliaZeroDivisionError>. Se tulostaa tuloksen, jos siinä ei ole nollalla jakoa. Kutsumus AbyB(2.0, 3.0)> laskee ja tulostaa-5.0>, kun soitat AbyB(3.0, 3.0)> yrittää jakaa nollalla, jolloin tuloksena on a ZeroDivisionError> , joka on kiinni ja a/b on 0 on painettu.
Python 3
def> AbyB(a , b):> >try>:> >c>=> ((a>+>b)>/> (a>->b))> >except> ZeroDivisionError:> >print> (>'a/b result in 0'>)> >else>:> >print> (c)> AbyB(>2.0>,>3.0>)> AbyB(>3.0>,>3.0>)> |
>
>
Lähtö:
-5.0 a/b result in 0>
Lopuksi avainsana Pythonissa
Python tarjoaa avainsanan vihdoinkin , joka suoritetaan aina kokeilun jälkeen, paitsi lohkot. Viimeinen lohko suoritetaan aina try-lohkon normaalin päättymisen jälkeen tai try-lohkon päätyttyä jonkin poikkeuksen vuoksi.
Syntaksi:
try: # Some Code.... except: # optional block # Handling of exception (if required) else: # execute if no exception finally: # Some code .....(always executed)>
Esimerkki:
Koodi yrittää suorittaa kokonaislukujakoa nollalla, mikä johtaa a ZeroDivisionError> . Se saa kiinni poikkeuksen ja tulostaa Ei voi jakaa nollalla. Poikkeuksesta riippumatta,finally>lohko suoritetaan ja tulostuu Tämä toteutetaan aina.
Python 3
try>:> >k>=> 5>/>/>0> >print>(k)> except> ZeroDivisionError:> >print>(>'Can't divide by zero'>)> finally>:> >print>(>'This is always executed'>)> |
>
>
Lähtö:
Can't divide by zero This is always executed>
Poikkeuksen korottaminen
The nostaa lausuntoa sallii ohjelmoijan pakottaa tietyn poikkeuksen tapahtumaan. Ainoa argumentti esillepanossa osoittaa esille otettavan poikkeuksen. Tämän on oltava joko poikkeusesiintymä tai poikkeusluokka (poikkeuksesta peräisin oleva luokka).
Tämä koodi herättää tarkoituksella aNameError>viestin kanssa Hei siellä käyttämälläraise>lauseke sisällä atry>lohko. Sitten se saa kiinniNameError>poikkeus, tulostaa Poikkeus, ja nostaa uudelleen saman poikkeuksen käyttämälläraise>. Tämä osoittaa, kuinka poikkeuksia voidaan nostaa ja käsitellä Pythonissa, mikä mahdollistaa mukautetut virheilmoitukset ja poikkeusten leviämisen.
Python 3
try>:> >raise> NameError(>'Hi there'>)> except> NameError:> >print> (>'An exception'>)> >raise> |
>
>
Yllä olevan koodin tulosteen rivi tulostetaan yksinkertaisesti poikkeuksena, mutta ajonaikainen virhe tapahtuu myös viimeisessä, koska viimeisellä rivillä on korotuslause. Joten komentorivin tulos näyttää tältä
Traceback (most recent call last): File '/home/d6ec14ca595b97bff8d8034bbf212a9f.py', line 5, in raise NameError('Hi there') # Raise Error NameError: Hi there> Poikkeuskäsittelyn edut:
- Parempi ohjelman luotettavuus : Käsittelemällä poikkeuksia oikein voit estää ohjelmaa kaatumasta tai tuottamasta vääriä tuloksia odottamattomien virheiden tai syötteiden vuoksi.
- Yksinkertaistettu virheiden käsittely : Poikkeuskäsittelyn avulla voit erottaa virheenkäsittelykoodin pääohjelmalogiikasta, mikä helpottaa koodin lukemista ja ylläpitoa.
- Puhdistuskoodi: Poikkeuskäsittelyä lukuun ottamatta voit välttää monimutkaisten ehdollisten lausekkeiden käyttämisen virheiden tarkistamiseen, mikä johtaa puhtaampaan ja luettavampaan koodiin.
- Helpompi virheenkorjaus : Kun poikkeus esitetään, Python-tulkki tulostaa jäljityksen, joka näyttää tarkan sijainnin, jossa poikkeus tapahtui, mikä helpottaa koodin virheenkorjausta.
Poikkeuskäsittelyn haitat:
- Suorituskyky: Poikkeusten käsittely voi olla hitaampaa kuin ehdollisten lauseiden käyttäminen virheiden tarkistamiseen, koska tulkin on suoritettava lisätyötä poikkeuksen havaitsemiseksi ja käsittelemiseksi.
- Lisääntynyt koodin monimutkaisuus : Poikkeusten käsittely voi tehdä koodistasi monimutkaisempaa, varsinkin jos sinun on käsiteltävä useita poikkeuksia tai otettava käyttöön monimutkainen virheenkäsittelylogiikka.
- Mahdolliset turvallisuusriskit: Väärin käsitellyt poikkeukset voivat paljastaa arkaluontoisia tietoja tai luoda tietoturva-aukkoja koodiisi, joten on tärkeää käsitellä poikkeuksia huolellisesti ja välttää paljastamasta liikaa tietoja ohjelmastasi.
Kaiken kaikkiaan Pythonin poikkeuskäsittelyn edut ovat haittoja suuremmat, mutta on tärkeää käyttää sitä harkiten ja huolellisesti koodin laadun ja ohjelman luotettavuuden ylläpitämiseksi.
Tämän artikkelin on kirjoittanut Nikhil Kumar Singh (nickzuck_007)