Vi har udforsket grundlæggende python indtil nu fra sæt 1 til 4 ( Sæt 1 | Sæt 2 | Sæt 3 | Sæt 4 ).
I denne artikel vil vi diskutere, hvordan man håndterer undtagelser i Python ved hjælp af try, undtagen, og endelig udsagn ved hjælp af rigtige eksempler.
Fejl i Python kan være af to typer, dvs. Syntaksfejl og undtagelser . Fejl er problemer i et program, som skyldes, at programmet stopper udførelsen. På den anden side opstår der undtagelser, når der opstår nogle interne hændelser, som ændrer programmets normale flow.
Forskellige typer undtagelser i python:
I Python er der flere indbyggede Python-undtagelser, der kan rejses, når der opstår en fejl under udførelsen af et program. Her er nogle af de mest almindelige typer undtagelser i Python:
- Syntaks fejl: Denne undtagelse opstår, når fortolkeren støder på en syntaksfejl i koden, såsom et forkert stavet nøgleord, et manglende kolon eller en ubalanceret parentes.
- Typefejl : Denne undtagelse opstår, når en operation eller funktion anvendes på et objekt af den forkerte type, såsom tilføjelse af en streng til et heltal.
- Navnefejl : Denne undtagelse opstår, når et variabel- eller funktionsnavn ikke findes i det aktuelle omfang.
- Indeksfejl : Denne undtagelse hæves, når et indeks er uden for rækkevidde for en liste, tuple eller andre sekvenstyper.
- KeyError : Denne undtagelse opstår, når en nøgle ikke findes i en ordbog.
- ValueError : Denne undtagelse opstår, når en funktion eller metode kaldes med et ugyldigt argument eller input, som f.eks. forsøg på at konvertere en streng til et heltal, når strengen ikke repræsenterer et gyldigt heltal.
- AttributError : Denne undtagelse opstår, når en attribut eller metode ikke findes på et objekt, som f.eks. forsøg på at få adgang til en ikke-eksisterende attribut for en klasseinstans.
- IOEfejl : Denne undtagelse opstår, når en I/O-handling, såsom at læse eller skrive en fil, mislykkes på grund af en input/output-fejl.
- ZeroDivisionError : Denne undtagelse hæves, når der gøres et forsøg på at dividere et tal med nul.
- Importfejl : Denne undtagelse opstår, når en importerklæring ikke kan finde eller indlæse et modul.
Dette er blot nogle få eksempler på de mange typer undtagelser, der kan forekomme i Python. Det er vigtigt at håndtere undtagelser korrekt i din kode ved at bruge try-except-blokke eller andre fejlhåndteringsteknikker, for på en yndefuld måde at håndtere fejl og forhindre programmet i at gå ned.
Forskellen mellem syntaksfejl og undtagelser
Syntaks fejl: Som navnet antyder er denne fejl forårsaget af den forkerte syntaks i koden. Det fører til opsigelse af programmet.
Eksempel:
Der er en syntaksfejl i koden. Det ' if'> udsagn skal efterfølges af et kolon (:>), og ' print'> erklæringen skal være indrykket for at være inde i ' if'> blok.
Python3
amount>=> 10000> if>(amount>>2999>)> print>(>'You are eligible to purchase Dsa Self Paced'>)> |
>
>
Produktion:

Undtagelser: Undtagelser er rejst, når programmet er syntaktisk korrekt, men koden resulterer i en fejl. Denne fejl stopper ikke udførelsen af programmet, men den ændrer programmets normale flow.
Eksempel:
Her i denne kode deler vi 'mærker' med nul, så der opstår en fejl kendt som 'ZeroDivisionError'
Python3
marks>=> 10000> a>=> marks>/> 0> print>(a)> |
>
>
Produktion:

I ovenstående eksempel hævede ZeroDivisionError, da vi forsøger at dividere et tal med 0.
Bemærk: Undtagelse er basisklassen for alle undtagelserne i Python. Du kan kontrollere undtagelseshierarkiet her .
Eksempel:
1) TypeError: Denne undtagelse opstår, når en operation eller funktion anvendes på et objekt af den forkerte type. Her er et eksempel:
Her en 'TypeError' hæves, da begge datatyper er forskellige, som bliver tilføjet.
vijay filmskuespiller
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 at løse det:
Koden forsøger at tilføje et heltal ( ' x'> ) og en streng ( ' y'> ) sammen, hvilket ikke er en gyldig operation, og det vil rejse en ' TypeError'> . Koden brugte en ' try'> og ' except'> bloker for at fange denne undtagelse og udskrive en fejlmeddelelse.
Python3
x>=> 5> y>=> 'hello'> try>:> >z>=> x>+> y> except> TypeError:> >print>(>'Error: cannot add an int and a str'>)> |
>
>Produktion
Error: cannot add an int and a str>
Prøv og undtag-erklæring – Fangste undtagelser
Try and except-sætninger bruges til at fange og håndtere undtagelser i Python. Udsagn, der kan give undtagelser, holdes inde i try-klausulen, og de udsagn, der håndterer undtagelsen, er skrevet inde i except-klausulen.
Eksempel: Her forsøger vi at få adgang til array-elementet, hvis indeks er uden for bunden, og håndtere den tilsvarende undtagelse.
Python3
a>=> [>1>,>2>,>3>]> try>:> >print> (>'Second element = %d'> %>(a[>1>]))> >print> (>'Fourth element = %d'> %>(a[>3>]))> except>:> >print> (>'An error occurred'>)> |
>
>Produktion
Second element = 2 An error occurred>
I ovenstående eksempel er de udsagn, der kan forårsage fejlen, placeret inde i try-sætningen (anden udskriftserklæring i vores tilfælde). Den anden udskriftserklæring forsøger at få adgang til det fjerde element i listen, som ikke er der, og dette giver en undtagelse. Denne undtagelse er så fanget af undtagelsessætningen.
Fangstspecifik undtagelse
En try-sætning kan have mere end én undtagen-sætning for at specificere handlere for forskellige undtagelser. Bemærk venligst, at der højst vil blive udført én handler. For eksempel kan vi tilføje IndexError i ovenstående kode. Den generelle syntaks for at tilføje specifikke undtagelser er -
try: # statement(s) except IndexError: # statement(s) except ValueError: # statement(s)>
Eksempel: Fange specifikke undtagelser i Python
java objekt til json
Koden definerer en funktion ' fun(a)'> der beregnerb>baseret på inputa>. Hvisa>er mindre end 4, forsøger den en division med nul, hvilket forårsager en ' ZeroDivisionError'> . Koden kalderfun(3)>ogfun(5)>inde i en prøve-undtagen blok. Den håndtererZeroDivisionError>tilfun(3)>og udskrifter ZeroDivisionError opstod og håndteres. Det ' NameError'> blok udføres ikke, da der ikke er nogen ' NameError'> undtagelser 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'>)> |
>
>Produktion
ZeroDivisionError Occurred and Handled>
Hvis du kommenterer på linjen sjov(3), bliver outputtet
NameError Occurred and Handled>
Outputtet ovenfor er sådan, fordi så snart python forsøger at få adgang til værdien af b, opstår NameError.
Prøv med Else Clause
I Python kan du også bruge else-sætningen på try-except-blokken, som skal være til stede efter alle undtagen-sætningerne. Koden går kun ind i else-blokken, hvis try-sætningen ikke rejser en undtagelse.
Prøv med en anden klausul
Koden definerer en funktion AbyB(a, b)> der beregnerc>som ((a+b) / (a-b)) og håndterer et potentialeZeroDivisionError>. Det udskriver resultatet, hvis der ikke er nogen division med nul fejl. Ringer AbyB(2.0, 3.0)> beregner og udskriver-5.0>, mens du ringer AbyB(3.0, 3.0)> forsøger at dividere med nul, hvilket resulterer i en ZeroDivisionError> , som fanges og a/b resulterer i 0 er udskrevet.
Python3
java til 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>)> |
>
>
Produktion:
-5.0 a/b result in 0>
Endelig søgeord i Python
Python giver et nøgleord endelig , som altid udføres efter forsøget og undtagen blokke. Den sidste blok udføres altid efter den normale afslutning af try-blokken eller efter at try-blokken afsluttes på grund af en undtagelse.
Syntaks:
try: # Some Code.... except: # optional block # Handling of exception (if required) else: # execute if no exception finally: # Some code .....(always executed)>
Eksempel:
Koden forsøger at udføre heltals division med nul, hvilket resulterer i en ZeroDivisionError> . Den fanger undtagelsen og udskriver Kan ikke dividere med nul. Uanset undtagelsenfinally>blok udføres og udskrives Dette udføres altid.
Python3
try>:> >k>=> 5>/>/>0> >print>(k)> except> ZeroDivisionError:> >print>(>'Can't divide by zero'>)> finally>:> >print>(>'This is always executed'>)> |
>
>
Produktion:
Can't divide by zero This is always executed>
Forhøjelsesundtagelse
Det rejse erklæring tillader programmøren at tvinge en specifik undtagelse til at forekomme. Det eneste argument, der rejses, angiver den undtagelse, der skal rejses. Dette skal enten være en undtagelsesforekomst eller en undtagelsesklasse (en klasse, der stammer fra Exception).
Denne kode rejser bevidst enNameError>med beskeden Hej brugerraise>erklæring inden for entry>blok. Så fanger denNameError>undtagelse, udskrifter En undtagelse, og re-raiser den samme undtagelse vharaise>. Dette viser, hvordan undtagelser kan rejses og håndteres i Python, hvilket giver mulighed for brugerdefinerede fejlmeddelelser og yderligere udbredelse af undtagelser.
Python3
try>:> >raise> NameError(>'Hi there'>)> except> NameError:> >print> (>'An exception'>)> >raise> |
>
>
Outputtet af ovenstående kode vil blot linje udskrives som en undtagelse, men en Runtime fejl vil også forekomme i den sidste på grund af raise-sætningen i den sidste linje. Så outputtet på din kommandolinje vil se ud
Traceback (most recent call last): File '/home/d6ec14ca595b97bff8d8034bbf212a9f.py', line 5, in raise NameError('Hi there') # Raise Error NameError: Hi there> Fordele ved undtagelseshåndtering:
- Forbedret programpålidelighed : Ved at håndtere undtagelser korrekt kan du forhindre dit program i at gå ned eller producere forkerte resultater på grund af uventede fejl eller input.
- Forenklet fejlhåndtering : Undtagelseshåndtering giver dig mulighed for at adskille fejlhåndteringskode fra hovedprogramlogikken, hvilket gør det nemmere at læse og vedligeholde din kode.
- Rengøringskode: Med undtagelseshåndtering kan du undgå at bruge komplekse betingede sætninger til at kontrollere for fejl, hvilket fører til renere og mere læsbar kode.
- Nemmere fejlfinding : Når en undtagelse er rejst, udskriver Python-fortolkeren en traceback, der viser den nøjagtige placering, hvor undtagelsen opstod, hvilket gør det nemmere at fejlsøge din kode.
Ulemper ved undtagelseshåndtering:
- Ydeevne overhead: Undtagelseshåndtering kan være langsommere end at bruge betingede sætninger til at kontrollere for fejl, da tolken skal udføre yderligere arbejde for at fange og håndtere undtagelsen.
- Øget kodekompleksitet : Undtagelseshåndtering kan gøre din kode mere kompleks, især hvis du skal håndtere flere typer undtagelser eller implementere kompleks fejlhåndteringslogik.
- Mulige sikkerhedsrisici: Forkert håndterede undtagelser kan potentielt afsløre følsomme oplysninger eller skabe sikkerhedssårbarheder i din kode, så det er vigtigt at håndtere undtagelser omhyggeligt og undgå at afsløre for mange oplysninger om dit program.
Samlet set opvejer fordelene ved undtagelseshåndtering i Python ulemperne, men det er vigtigt at bruge det fornuftigt og omhyggeligt for at opretholde kodekvalitet og programpålidelighed.
Denne artikel er bidraget af Nikhil Kumar Singh(nickzuck_007)