Python-unntakshåndtering

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.

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

Koden definerer en funksjon ' fun(a)'> som beregner b> basert på innspillet a> . Hvis a> er mindre enn 4, prøver den å dele med null, noe som forårsaker a ' ZeroDivisionError'> . Koden ringer fun(3)> og fun(5)> inne i en prøve-unntatt blokk. Den håndterer ZeroDivisionError> til fun(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 beregner c> som ((a+b) / (a-b)) og håndterer et potensial ZeroDivisionError> . 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




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 unntaket finally> 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 en NameError> med meldingen Hei der bruker raise> uttalelse innenfor en try> blokkere. Deretter fanger den opp NameError> unntak, utskrifter Et unntak, og re-reiser det samme unntaket ved å bruke raise> . 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)



Topp Artikler

Kategori

Interessante Artikler