logo

Python-unntakshåndtering

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)