Vi har utforsket grunnleggende python til nå fra sett 1 til 4 ( Sett 1 | Sett 2 | Sett 3 | Sett 4 ).
I denne artikkelen vil vi diskutere hvordan du håndterer unntak i Python ved å bruke try, except, og til slutt uttalelser ved hjelp av riktige eksempler.
Feil i Python kan være av to typer, dvs. Syntaksfeil og unntak . Feil er problemer i et program som gjør at programmet stopper kjøringen. På den annen side oppstår unntak når noen interne hendelser oppstår som endrer den normale flyten i programmet.
Ulike typer unntak i python:
I Python er det flere innebygde Python-unntak som kan oppstå når det oppstår en feil under kjøringen av et program. Her er noen av de vanligste typene unntak i Python:
- Syntaksfeil: Dette unntaket oppstår når tolken støter på en syntaksfeil i koden, for eksempel et feilstavet nøkkelord, et manglende kolon eller en ubalansert parentes.
- TypeError : Dette unntaket oppstår når en operasjon eller funksjon brukes på et objekt av feil type, for eksempel å legge til en streng til et heltall.
- Navnefeil : Dette unntaket oppstår når et variabel- eller funksjonsnavn ikke finnes i gjeldende omfang.
- Indeksfeil : Dette unntaket økes når en indeks er utenfor rekkevidde for en liste, tuppel eller andre sekvenstyper.
- KeyError : Dette unntaket oppstår når en nøkkel ikke finnes i en ordbok.
- ValueError : Dette unntaket oppstår når en funksjon eller metode kalles med et ugyldig argument eller inndata, for eksempel å prøve å konvertere en streng til et heltall når strengen ikke representerer et gyldig heltall.
- AttributeError : Dette unntaket oppstår når et attributt eller en metode ikke finnes på et objekt, for eksempel forsøk på å få tilgang til et ikke-eksisterende attributt til en klasseforekomst.
- IOFeil : Dette unntaket oppstår når en I/O-operasjon, som å lese eller skrive en fil, mislykkes på grunn av en inn-/utdatafeil.
- ZeroDivisionError : Dette unntaket økes når det gjøres et forsøk på å dele et tall med null.
- Importerror : Dette unntaket oppstår når en importsetning ikke klarer å finne eller laste en modul.
Dette er bare noen få eksempler på de mange typene unntak som kan forekomme i Python. Det er viktig å håndtere unntak riktig i koden din ved å bruke prøve-unntatt-blokker eller andre feilhåndteringsteknikker, for å behandle feil på en elegant måte og forhindre at programmet krasjer.
Forskjellen mellom syntaksfeil og unntak
Syntaksfeil: Som navnet antyder er denne feilen forårsaket av feil syntaks i koden. Det fører til avslutning av programmet.
Eksempel:
Det er en syntaksfeil i koden. De ' if'> setningen skal etterfølges av et kolon (:>), og ' print'> setningen skal være innrykket for å være inne i ' if'> blokkere.
Python3
amount>=> 10000> if>(amount>>2999>)> print>(>'You are eligible to purchase Dsa Self Paced'>)> |
>
>
Produksjon:

Unntak: Unntak gjøres når programmet er syntaktisk korrekt, men koden resulterer i en feil. Denne feilen stopper ikke kjøringen av programmet, men den endrer den normale flyten av programmet.
Eksempel:
Her i denne koden deler vi 'merker' med null slik at det oppstår en feil kjent som 'ZeroDivisionError'
Python3
marks>=> 10000> a>=> marks>/> 0> print>(a)> |
>
>
Produksjon:

I eksemplet ovenfor hevet ZeroDivisionError da vi prøver å dele et tall med 0.
Merk: Unntak er basisklassen for alle unntakene i Python. Du kan sjekke unntakshierarkiet her .
Eksempel:
1) TypeError: Dette unntaket oppstår når en operasjon eller funksjon brukes på et objekt av feil type. Her er et eksempel:
Her en 'TypeError' heves da begge datatypene er forskjellige som legges til.
java-bryter
Python3
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'>
prøv catch block for å løse det:
Koden prøver å legge til et heltall ( ' x'> ) og en streng ( ' y'> ) sammen, som ikke er en gyldig operasjon, og det vil øke en ' TypeError'> . Koden brukte a ' try'> og ' except'> blokker for å fange dette unntaket og skrive ut en feilmelding.
Python3
x>=> 5> y>=> 'hello'> try>:> >z>=> x>+> y> except> TypeError:> >print>(>'Error: cannot add an int and a str'>)> |
>
>Produksjon
Error: cannot add an int and a str>
Prøv og unntatt-uttalelse – fanger unntak
Try and except-setninger brukes til å fange opp og håndtere unntak i Python. Utsagn som kan gi unntak holdes inne i try-leddet, og utsagn som håndterer unntaket er skrevet inne i except-leddet.
Eksempel: Her prøver vi å få tilgang til array-elementet hvis indeks er utenfor grensen og håndtere det tilsvarende unntaket.
Python3
a>=> [>1>,>2>,>3>]> try>:> >print> (>'Second element = %d'> %>(a[>1>]))> >print> (>'Fourth element = %d'> %>(a[>3>]))> except>:> >print> (>'An error occurred'>)> |
>
>Produksjon
Second element = 2 An error occurred>
I eksemplet ovenfor er setningene som kan forårsake feilen plassert i try-setningen (andre utskriftssetning i vårt tilfelle). Den andre utskriftssetningen prøver å få tilgang til det fjerde elementet i listen som ikke er der, og dette gir et unntak. Dette unntaket fanges da opp av unntaksutsagnet.
Spesifikt fangstunntak
En try-setning kan ha mer enn én unntatt-klausul, for å spesifisere behandlere for forskjellige unntak. Vær oppmerksom på at maksimalt én behandler vil bli utført. For eksempel kan vi legge til IndexError i koden ovenfor. Den generelle syntaksen for å legge til spesifikke unntak er -
try: # statement(s) except IndexError: # statement(s) except ValueError: # statement(s)>
Eksempel: Fanger spesifikke unntak i Python
java objekt til json
Koden definerer en funksjon ' fun(a)'> som beregnerb>basert på innspilleta>. Hvisa>er mindre enn 4, prøver den å dele med null, noe som forårsaker a ' ZeroDivisionError'> . Koden ringerfun(3)>ogfun(5)>inne i en prøve-unntatt blokk. Den håndtererZeroDivisionError>tilfun(3)>og utskrifter ZeroDivision Error oppstod og behandlet. De ' NameError'> blokk utføres ikke siden det ikke er noen ' NameError'> unntak i koden.
Python3
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'>)> |
>
>Produksjon
ZeroDivisionError Occurred and Handled>
Hvis du kommenterer linjen moro(3), vil utgangen være
NameError Occurred and Handled>
Utdataene ovenfor er slik fordi så snart python prøver å få tilgang til verdien av b, oppstår NameError.
Prøv med Else Clause
I Python kan du også bruke else-klausulen på try-except-blokken som må være til stede etter alle unntatt-klausulene. Koden går bare inn i else-blokken hvis try-leddet ikke gir et unntak.
Prøv med en annen klausul
Koden definerer en funksjon AbyB(a, b)> som beregnerc>som ((a+b) / (a-b)) og håndterer et potensialZeroDivisionError>. Den skriver ut resultatet hvis det ikke er noen divisjon med null feil. Ringer AbyB(2.0, 3.0)> beregner og skriver ut-5.0>, mens du ringer AbyB(3.0, 3.0)> prøver å dele på null, noe som resulterer i a ZeroDivisionError> , som er fanget og a/b gir 0 er skrevet ut.
Python3
java for pause
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>)> |
>
>
Produksjon:
-5.0 a/b result in 0>
Endelig nøkkelord i Python
Python gir et nøkkelord endelig , som alltid kjøres etter forsøket og unntatt blokker. Den siste blokken kjøres alltid etter normal avslutning av prøveblokken eller etter at prøveblokken avsluttes på grunn av et unntak.
Syntaks:
try: # Some Code.... except: # optional block # Handling of exception (if required) else: # execute if no exception finally: # Some code .....(always executed)>
Eksempel:
Koden prøver å utføre heltallsdivisjon med null, noe som resulterer i en ZeroDivisionError> . Den fanger opp unntaket og skriver ut Kan ikke dele på null. Uavhengig av unntaketfinally>blokken utføres og skrives ut Dette blir alltid utført.
Python3
try>:> >k>=> 5>/>/>0> >print>(k)> except> ZeroDivisionError:> >print>(>'Can't divide by zero'>)> finally>:> >print>(>'This is always executed'>)> |
>
>
Produksjon:
Can't divide by zero This is always executed>
Unntak for heving
De heve uttalelse lar programmereren tvinge et spesifikt unntak til å skje. Det eneste argumentet i reisemålet indikerer unntaket som skal reises. Dette må enten være en unntaksforekomst eller en unntaksklasse (en klasse som stammer fra Exception).
Denne koden reiser med vilje enNameError>med meldingen Hei der brukerraise>uttalelse innenfor entry>blokkere. Deretter fanger den oppNameError>unntak, utskrifter Et unntak, og re-reiser det samme unntaket ved å brukeraise>. Dette demonstrerer hvordan unntak kan økes og håndteres i Python, noe som gir mulighet for tilpassede feilmeldinger og videre spredning av unntak.
Python3
try>:> >raise> NameError(>'Hi there'>)> except> NameError:> >print> (>'An exception'>)> >raise> |
>
>
Utdataene fra koden ovenfor vil ganske enkelt skrives ut som et unntak, men en Runtime-feil vil også oppstå i den siste på grunn av raise-setningen på den siste linjen. Så utdataene på kommandolinjen vil se ut
Traceback (most recent call last): File '/home/d6ec14ca595b97bff8d8034bbf212a9f.py', line 5, in raise NameError('Hi there') # Raise Error NameError: Hi there> Fordeler med unntakshåndtering:
- Forbedret programpålitelighet : Ved å håndtere unntak riktig kan du forhindre at programmet krasjer eller gir feil resultater på grunn av uventede feil eller inndata.
- Forenklet feilhåndtering : Unntakshåndtering lar deg skille feilhåndteringskode fra hovedprogramlogikken, noe som gjør det enklere å lese og vedlikeholde koden.
- Rengjøringskode: Med unntakshåndtering kan du unngå å bruke komplekse betingede setninger for å se etter feil, noe som fører til renere og mer lesbar kode.
- Enklere feilsøking : Når et unntak oppstår, skriver Python-tolken ut en tilbakesporing som viser den nøyaktige plasseringen der unntaket skjedde, noe som gjør det enklere å feilsøke koden din.
Ulemper med unntakshåndtering:
- Ytelsesoverhead: Unntakshåndtering kan være tregere enn å bruke betingede setninger for å se etter feil, da tolken må utføre ekstra arbeid for å fange opp og håndtere unntaket.
- Økt kodekompleksitet : Unntakshåndtering kan gjøre koden mer kompleks, spesielt hvis du må håndtere flere typer unntak eller implementere kompleks feilhåndteringslogikk.
- Mulige sikkerhetsrisikoer: Feilhåndterte unntak kan potensielt avsløre sensitiv informasjon eller skape sikkerhetssårbarheter i koden din, så det er viktig å håndtere unntak forsiktig og unngå å avsløre for mye informasjon om programmet ditt.
Samlet sett oppveier fordelene med unntakshåndtering i Python ulempene, men det er viktig å bruke det fornuftig og forsiktig for å opprettholde kodekvalitet og programpålitelighet.
Denne artikkelen er bidratt av Nikhil Kumar Singh(nickzuck_007)