Vi har utforskat grundläggande python hittills från set 1 till 4 ( Set 1 | Set 2 | Set 3 | Set 4 ).
I den här artikeln kommer vi att diskutera hur man hanterar undantag i Python med hjälp av try, except, och slutligen uttalanden med hjälp av korrekta exempel.
Fel i Python kan vara av två typer, dvs. Syntaxfel och undantag . Fel är problem i ett program som gör att programmet stoppar exekveringen. Å andra sidan görs undantag när vissa interna händelser inträffar som ändrar programmets normala flöde.
Olika typer av undantag i python:
I Python finns det flera inbyggda Python-undantag som kan uppstå när ett fel uppstår under körningen av ett program. Här är några av de vanligaste typerna av undantag i Python:
- Syntaxfel: Detta undantag uppstår när tolken stöter på ett syntaxfel i koden, till exempel ett felstavat nyckelord, ett saknat kolon eller en obalanserad parentes.
- Skrivfel : Detta undantag uppstår när en operation eller funktion tillämpas på ett objekt av fel typ, till exempel att lägga till en sträng till ett heltal.
- Namnfel : Detta undantag uppstår när en variabel eller funktionsnamn inte hittas i det aktuella omfånget.
- IndexError : Detta undantag höjs när ett index ligger utanför intervallet för en lista, tuppel eller andra sekvenstyper.
- KeyError : Detta undantag uppstår när en nyckel inte finns i en ordbok.
- ValueError : Detta undantag uppstår när en funktion eller metod anropas med ett ogiltigt argument eller indata, som att försöka konvertera en sträng till ett heltal när strängen inte representerar ett giltigt heltal.
- AttributeError : Detta undantag uppstår när ett attribut eller en metod inte hittas på ett objekt, till exempel när man försöker komma åt ett icke-existerande attribut för en klassinstans.
- IOFel : Detta undantag uppstår när en I/O-operation, som att läsa eller skriva en fil, misslyckas på grund av ett in-/utmatningsfel.
- ZeroDivisionError : Detta undantag höjs när ett försök görs att dividera ett tal med noll.
- ImportError : Detta undantag uppstår när en importsats inte kan hitta eller ladda en modul.
Det här är bara några exempel på de många typer av undantag som kan förekomma i Python. Det är viktigt att hantera undantag korrekt i din kod med hjälp av försök-utom-block eller andra felhanteringstekniker, för att på ett elegant sätt hantera fel och förhindra att programmet kraschar.
Skillnad mellan syntaxfel och undantag
Syntaxfel: Som namnet antyder orsakas detta fel av fel syntax i koden. Det leder till att programmet avslutas.
Exempel:
Det finns ett syntaxfel i koden. De ' if'> uttalande ska följas av ett kolon (:>), och den ' print'> uttalandet ska vara indraget för att vara inuti ' if'> blockera.
Python3
amount>=> 10000> if>(amount>>2999>)> print>(>'You are eligible to purchase Dsa Self Paced'>)> |
>
>
Produktion:

Undantag: Undantag tas upp när programmet är syntaktisk korrekt, men koden resulterar i ett fel. Detta fel stoppar inte körningen av programmet, men det ändrar programmets normala flöde.
Exempel:
Här i den här koden delar vi upp 'märken' med noll så att ett fel uppstår som kallas 'ZeroDivisionError'
java konverterar heltal till sträng
Python3
marks>=> 10000> a>=> marks>/> 0> print>(a)> |
>
blockerade kontakter
>
Produktion:

I exemplet ovan höjdes ZeroDivisionError när vi försöker dividera ett tal med 0.
Notera: Exception är basklassen för alla undantag i Python. Du kan kontrollera undantagshierarkin här .
Exempel:
1) TypeError: Detta undantag uppstår när en operation eller funktion tillämpas på ett objekt av fel typ. Här är ett exempel:
Här en 'Skrivfel' höjs eftersom båda datatyperna är olika som läggs till.
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'>
försök catch block för att lösa det:
Koden försöker lägga till ett heltal ( ' x'> ) och en sträng ( ' y'> ) tillsammans, vilket inte är en giltig operation, och det kommer att höja en ' TypeError'> . Koden använde a ' try'> och ' except'> blockera för att fånga detta undantag och skriva ut ett felmeddelande.
Python3
x>=> 5> y>=> 'hello'> try>:> >z>=> x>+> y> except> TypeError:> >print>(>'Error: cannot add an int and a str'>)> |
alfabetet i siffror
>
>Produktion
Error: cannot add an int and a str>
Prova och undanta uttalande – fånga undantag
Try and except-satser används för att fånga och hantera undantag i Python. Påståenden som kan ge undantag hålls i try-satsen och de satser som hanterar undantaget skrivs i except-satsen.
Exempel: Här försöker vi komma åt arrayelementet vars index är out of bound och hantera motsvarande undantag.
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 exemplet ovan placeras satserna som kan orsaka felet inuti try-satsen (andra utskriftssatsen i vårt fall). Den andra utskriftssatsen försöker komma åt det fjärde elementet i listan som inte finns där och detta skapar ett undantag. Detta undantag fångas sedan av except-satsen.
Specifikt undantag för fångst
En try-sats kan ha mer än en except-sats, för att ange hanterare för olika undantag. Observera att högst en hanterare kommer att exekveras. Till exempel kan vi lägga till IndexError i ovanstående kod. Den allmänna syntaxen för att lägga till specifika undantag är -
try: # statement(s) except IndexError: # statement(s) except ValueError: # statement(s)>
Exempel: Fångar specifika undantag i Python
Koden definierar en funktion ' fun(a)'> som räknarb>baserat på inputa>. Oma>är mindre än 4, försöker den en division med noll, vilket orsakar a ' ZeroDivisionError'> . Koden ringerfun(3)>ochfun(5)>inuti ett försök-utom-block. Den hanterarZeroDivisionError>förfun(3)>och utskrifter ZeroDivisionError uppstod och hanterades. De ' NameError'> blocket exekveras inte eftersom det inte finns några ' NameError'> undantag 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>
Om du kommenterar raden fun(3), blir resultatet
NameError Occurred and Handled>
Utdata ovan är så för så snart python försöker komma åt värdet på b, uppstår NameError.
Försök med Else Clause
I Python kan du också använda else-satsen på try-except-blocket som måste finnas efter alla undantagssatser. Koden går in i else-blocket endast om try-satsen inte ger upphov till ett undantag.
ändra namn katalog linux
Försök med annan klausul
Koden definierar en funktion AbyB(a, b)> som räknarc>som ((a+b) / (a-b)) och hanterar en potentialZeroDivisionError>. Den skriver ut resultatet om det inte finns något fel på division med noll. Kallelse AbyB(2.0, 3.0)> räknar ut och skriver ut-5.0>, medan du ringer AbyB(3.0, 3.0)> försöker dividera med noll, vilket resulterar i a ZeroDivisionError> , som fångas och a/b ger 0 är tryckt.
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>)> |
>
>
Produktion:
-5.0 a/b result in 0>
Äntligen Nyckelord i Python
Python tillhandahåller ett nyckelord till sist , som alltid körs efter försöket och utom block. Det sista blocket körs alltid efter den normala avslutningen av försöksblocket eller efter att försöksblocket avslutats på grund av något undantag.
Syntax:
try: # Some Code.... except: # optional block # Handling of exception (if required) else: # execute if no exception finally: # Some code .....(always executed)>
Exempel:
Koden försöker utföra heltalsdivision med noll, vilket resulterar i a ZeroDivisionError> . Den fångar undantaget och skriver ut Kan inte dividera med noll. Oavsett undantag, denfinally>blocket exekveras och skrivs ut Detta utförs alltid.
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>
Höjning undantag
De lyfta uttalande låter programmeraren tvinga fram ett specifikt undantag. Det enda argumentet anger det undantag som ska tas upp. Detta måste antingen vara en undantagsinstans eller en undantagsklass (en klass som härrör från Exception).
Denna kod väcker avsiktligt enNameError>med meddelandet Hallå där användaraise>uttalande inom entry>blockera. Sedan fångar denNameError>undantag, utskrifter Ett undantag, och återuppstår samma undantag med hjälp avraise>. Detta visar hur undantag kan tas upp och hanteras i Python, vilket möjliggör anpassade felmeddelanden och ytterligare undantagsspridning.
Python3
try>:> >raise> NameError(>'Hi there'>)> except> NameError:> >print> (>'An exception'>)> >raise> |
Skådespelerskan Rakul Preet Singh
>
>
Utdata från ovanstående kod kommer helt enkelt att skrivs ut som ett undantag, men ett Runtime-fel kommer också att inträffa i den sista på grund av höjningssatsen på den sista raden. Så utdata på din kommandorad kommer att se ut
Traceback (most recent call last): File '/home/d6ec14ca595b97bff8d8034bbf212a9f.py', line 5, in raise NameError('Hi there') # Raise Error NameError: Hi there> Fördelar med undantagshantering:
- Förbättrad programtillförlitlighet : Genom att hantera undantag korrekt kan du förhindra att ditt program kraschar eller ger felaktiga resultat på grund av oväntade fel eller inmatning.
- Förenklad felhantering : Undantagshantering låter dig separera felhanteringskod från huvudprogrammets logik, vilket gör det lättare att läsa och underhålla din kod.
- Rengöringskod: Med undantagshantering kan du undvika att använda komplexa villkorliga uttalanden för att leta efter fel, vilket leder till renare och mer läsbar kod.
- Enklare felsökning : När ett undantag uppstår skriver Python-tolken ut en spårning som visar den exakta platsen där undantaget inträffade, vilket gör det lättare att felsöka din kod.
Nackdelar med undantagshantering:
- Prestanda overhead: Undantagshantering kan vara långsammare än att använda villkorliga uttalanden för att kontrollera fel, eftersom tolken måste utföra ytterligare arbete för att fånga och hantera undantaget.
- Ökad kodkomplexitet : Undantagshantering kan göra din kod mer komplex, speciellt om du måste hantera flera typer av undantag eller implementera komplex felhanteringslogik.
- Möjliga säkerhetsrisker: Felaktigt hanterade undantag kan potentiellt avslöja känslig information eller skapa säkerhetsbrister i din kod, så det är viktigt att hantera undantag försiktigt och undvika att exponera för mycket information om ditt program.
Sammantaget överväger fördelarna med undantagshantering i Python nackdelarna, men det är viktigt att använda det klokt och noggrant för att bibehålla kodkvalitet och programtillförlitlighet.
Den här artikeln är bidragit av Nikhil Kumar Singh(nickzuck_007)