We hebben tot nu toe de basispython verkend van set 1 tot en met 4 ( Set 1 | Stel 2 in | Set 3 | Set 4 ).
In dit artikel bespreken we hoe we met uitzonderingen in Python kunnen omgaan met behulp van try-,except- en final-instructies met behulp van goede voorbeelden.
Fouten in Python kunnen van twee soorten zijn, d.w.z. Syntaxisfouten en uitzonderingen . Fouten zijn problemen in een programma waardoor het programma de uitvoering stopt. Aan de andere kant doen zich uitzonderingen voor wanneer er interne gebeurtenissen plaatsvinden die de normale stroom van het programma veranderen.
wanneer werd de school uitgevonden?
Verschillende soorten uitzonderingen in Python:
In Python zijn er verschillende ingebouwde Python-uitzonderingen die kunnen optreden wanneer er een fout optreedt tijdens de uitvoering van een programma. Hier zijn enkele van de meest voorkomende soorten uitzonderingen in Python:
- Syntax error: Deze uitzondering doet zich voor wanneer de tolk een syntaxisfout in de code aantreft, zoals een verkeerd gespeld trefwoord, een ontbrekende dubbele punt of een onevenwichtig haakje.
- TypeError : Deze uitzondering doet zich voor wanneer een bewerking of functie wordt toegepast op een object van het verkeerde type, zoals het toevoegen van een tekenreeks aan een geheel getal.
- NaamFout : Deze uitzondering doet zich voor wanneer een variabele of functienaam niet wordt gevonden in het huidige bereik.
- Indexfout : deze uitzondering doet zich voor wanneer een index buiten het bereik valt voor een lijst, tuple of andere reekstypen.
- Sleutelfout : deze uitzondering doet zich voor wanneer een sleutel niet in een woordenboek wordt gevonden.
- Waardefout : Deze uitzondering doet zich voor wanneer een functie of methode wordt aangeroepen met een ongeldig argument of invoer, bijvoorbeeld als u probeert een tekenreeks naar een geheel getal te converteren terwijl de tekenreeks geen geldig geheel getal vertegenwoordigt.
- AttribuutFout : Deze uitzondering doet zich voor wanneer een attribuut of methode niet wordt gevonden op een object, bijvoorbeeld wanneer wordt geprobeerd toegang te krijgen tot een niet-bestaand attribuut van een klasse-instantie.
- IOfout : deze uitzondering doet zich voor wanneer een I/O-bewerking, zoals het lezen of schrijven van een bestand, mislukt vanwege een invoer-/uitvoerfout.
- ZeroDivisionFout : deze uitzondering doet zich voor wanneer wordt geprobeerd een getal door nul te delen.
- ImportFout : deze uitzondering doet zich voor wanneer een importinstructie er niet in slaagt een module te vinden of te laden.
Dit zijn slechts enkele voorbeelden van de vele soorten uitzonderingen die in Python kunnen voorkomen. Het is belangrijk om uitzonderingen in uw code op de juiste manier af te handelen met behulp van try-except-blokken of andere foutafhandelingstechnieken, om fouten netjes af te handelen en te voorkomen dat het programma crasht.
Verschil tussen syntaxisfout en uitzonderingen
Syntax error: Zoals de naam al doet vermoeden, wordt deze fout veroorzaakt door de verkeerde syntaxis in de code. Het leidt tot de beëindiging van het programma.
Voorbeeld:
Er zit een syntaxisfout in de code. De ' if'> instructie moet worden gevolgd door een dubbele punt (:>), en de ' print'> De instructie moet ingesprongen zijn zodat deze binnen de ' if'> blok.
Python3
amount>=> 10000> if>(amount>>2999>)> print>(>'You are eligible to purchase Dsa Self Paced'>)> |
>
>
Uitgang:

Uitzonderingen: Uitzonderingen doen zich voor wanneer het programma syntactisch correct is, maar de code resulteert in een fout. Deze fout stopt de uitvoering van het programma niet, maar verandert wel de normale stroom van het programma.
Voorbeeld:
Hier in deze code a s verdelen we de ‘merken’ door nul, zodat er een fout optreedt die bekend staat als ‘ZeroDivisionError’
Python3
marks>=> 10000> a>=> marks>/> 0> print>(a)> |
>
arraylist sorteren
>
Uitgang:

In het bovenstaande voorbeeld is de ZeroDivisionError verhoogd terwijl we proberen een getal door 0 te delen.
Opmerking: Uitzondering is de basisklasse voor alle uitzonderingen in Python. U kunt de uitzonderingshiërarchie controleren hier .
Voorbeeld:
1) TypeError: deze uitzondering treedt op wanneer een bewerking of functie wordt toegepast op een object van het verkeerde type. Hier is een voorbeeld:
Hier een ‘TypeError’ wordt verhoogd omdat beide gegevenstypen verschillend zijn en worden toegevoegd.
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'>
probeer catch block om het op te lossen:
De code probeert een geheel getal ( ' x'> ) en een tekenreeks ( ' y'> ) samen, wat geen geldige bewerking is, en het zal a verhogen ' TypeError'> . De code gebruikte a ' try'> En ' except'> blokkeren om deze uitzondering op te vangen en een foutmelding af te drukken.
Python3
x>=> 5> y>=> 'hello'> try>:> >z>=> x>+> y> except> TypeError:> >print>(>'Error: cannot add an int and a str'>)> |
>
>Uitvoer
Error: cannot add an int and a str>
Try and Except-verklaring – Uitzonderingen opvangen
Try andexcept-instructies worden gebruikt om uitzonderingen in Python op te vangen en af te handelen. Verklaringen die uitzonderingen kunnen veroorzaken, worden in de try-clausule bewaard en de instructies die de uitzondering afhandelen, worden in de Except-clausule geschreven.
Voorbeeld: Hier proberen we toegang te krijgen tot het array-element waarvan de index buiten bereik is en de bijbehorende uitzondering af te handelen.
Python3
converteer tekenreeks naar char
a>=> [>1>,>2>,>3>]> try>:> >print> (>'Second element = %d'> %>(a[>1>]))> >print> (>'Fourth element = %d'> %>(a[>3>]))> except>:> >print> (>'An error occurred'>)> |
>
>Uitvoer
Second element = 2 An error occurred>
In het bovenstaande voorbeeld worden de uitspraken die de fout kunnen veroorzaken, in de try-instructie geplaatst (tweede print-instructie in ons geval). De tweede print-instructie probeert toegang te krijgen tot het vierde element van de lijst dat er niet is, en dit genereert een uitzondering. Deze uitzondering wordt vervolgens opgevangen door de uitzonderingsinstructie.
Specifieke uitzondering opvangen
Een try-instructie kan meer dan één Except-clausule bevatten, om handlers voor verschillende uitzonderingen te specificeren. Houd er rekening mee dat er maximaal één handler wordt uitgevoerd. We kunnen bijvoorbeeld IndexError toevoegen aan de bovenstaande code. De algemene syntaxis voor het toevoegen van specifieke uitzonderingen is:
try: # statement(s) except IndexError: # statement(s) except ValueError: # statement(s)>
Voorbeeld: Specifieke uitzonderingen opvangen in Python
De code definieert een functie ' fun(a)'> dat berekentb>op basis van de invoera>. Alsa>kleiner is dan 4, probeert het een deling door nul, waardoor a ontstaat ' ZeroDivisionError'> . De code roeptfun(3)>Enfun(5)>binnen een try-except-blok. Het verzorgt deZeroDivisionError>voorfun(3)>en afdrukken ZeroDivisionError opgetreden en afgehandeld. De ' NameError'> blok wordt niet uitgevoerd omdat er geen zijn ' NameError'> uitzonderingen in de code.
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'>)> |
>
>Uitvoer
ZeroDivisionError Occurred and Handled>
Als u commentaar geeft op de regel fun(3), zal de uitvoer zijn
NameError Occurred and Handled>
De bovenstaande uitvoer is zo omdat zodra Python probeert toegang te krijgen tot de waarde van b, NameError optreedt.
Probeer het eens met de Else-clausule
In Python kun je ook de else-clausule gebruiken in het try-except-blok, dat aanwezig moet zijn na alle behalve-clausules. De code komt alleen in het else-blok terecht als de try-clausule geen uitzondering oplevert.
Probeer het met de else-clausule
De code definieert een functie AbyB(a, b)> dat berekentc>als ((a+b) / (a-b)) en behandelt een potentieelZeroDivisionError>. Het drukt het resultaat af als er geen deling door nul is. Roeping AbyB(2.0, 3.0)> berekent en print-5.0>, terwijl u belt AbyB(3.0, 3.0)> probeert te delen door nul, resulterend in a ZeroDivisionError> , die wordt gevangen en a/b resulteert in 0 wordt afgedrukt.
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>)> |
>
>
Uitgang:
-5.0 a/b result in 0>
Eindelijk trefwoord in Python
Python levert een trefwoord Eindelijk , die altijd wordt uitgevoerd na de try-and-except-blokken. Het laatste blok wordt altijd uitgevoerd na de normale beëindiging van het try-blok of nadat het try-blok is beëindigd vanwege een uitzondering.
hoe de school is uitgevonden
Syntaxis:
try: # Some Code.... except: # optional block # Handling of exception (if required) else: # execute if no exception finally: # Some code .....(always executed)>
Voorbeeld:
De code probeert gehele getallen door nul te delen, wat resulteert in a ZeroDivisionError> . Het vangt de uitzondering op en wordt afgedrukt Kan niet delen door nul. Ongeacht de uitzondering, definally>blok wordt uitgevoerd en afgedrukt Dit wordt altijd uitgevoerd.
Python3
try>:> >k>=> 5>/>/>0> >print>(k)> except> ZeroDivisionError:> >print>(>'Can't divide by zero'>)> finally>:> >print>(>'This is always executed'>)> |
Java-einde
>
>
Uitgang:
Can't divide by zero This is always executed>
Uitzondering verhogen
De verklaring opwerpen Hiermee kan de programmeur een specifieke uitzondering forceren. Het enige argument in raise geeft de uitzondering aan die moet worden gemaakt. Dit moet een uitzonderingsinstantie zijn of een uitzonderingsklasse (een klasse die is afgeleid van Exception).
Deze code verhoogt opzettelijk aNameError>met de boodschap Hoi de ... gebruikenraise>verklaring binnen eentry>blok. Vervolgens vangt het deNameError>uitzondering, afdrukken Een uitzondering, en roept dezelfde uitzondering opnieuw op met behulp vanraise>. Dit laat zien hoe uitzonderingen kunnen worden gegenereerd en afgehandeld in Python, waardoor aangepaste foutmeldingen en verdere verspreiding van uitzonderingen mogelijk zijn.
Python3
try>:> >raise> NameError(>'Hi there'>)> except> NameError:> >print> (>'An exception'>)> >raise> |
>
>
De uitvoer van de bovenstaande code wordt eenvoudigweg afgedrukt als een uitzondering, maar er zal ook een Runtime-fout optreden in de laatste regel vanwege de raise-instructie op de laatste regel. De uitvoer op uw opdrachtregel ziet er dus zo uit
Traceback (most recent call last): File '/home/d6ec14ca595b97bff8d8034bbf212a9f.py', line 5, in raise NameError('Hi there') # Raise Error NameError: Hi there> Voordelen van uitzonderingsafhandeling:
- Verbeterde programmabetrouwbaarheid : Door op de juiste manier met uitzonderingen om te gaan, kunt u voorkomen dat uw programma crasht of onjuiste resultaten produceert als gevolg van onverwachte fouten of invoer.
- Vereenvoudigde foutafhandeling : Met uitzonderingsafhandeling kunt u de foutafhandelingscode scheiden van de hoofdprogrammalogica, waardoor het gemakkelijker wordt uw code te lezen en te onderhouden.
- Reinigingscode: Met uitzonderingsafhandeling kunt u voorkomen dat u complexe voorwaardelijke instructies gebruikt om op fouten te controleren, wat leidt tot schonere en beter leesbare code.
- Gemakkelijker debuggen : Wanneer er een uitzondering optreedt, drukt de Python-interpreter een traceback af die de exacte locatie laat zien waar de uitzondering heeft plaatsgevonden, waardoor het eenvoudiger wordt om fouten in uw code te debuggen.
Nadelen van de afhandeling van uitzonderingen:
- Prestatieoverhead: Het afhandelen van uitzonderingen kan langzamer zijn dan het gebruik van voorwaardelijke instructies om op fouten te controleren, omdat de tolk extra werk moet verrichten om de uitzondering op te vangen en af te handelen.
- Verhoogde codecomplexiteit : Uitzonderingsafhandeling kan uw code complexer maken, vooral als u meerdere soorten uitzonderingen moet afhandelen of complexe logica voor foutafhandeling moet implementeren.
- Mogelijke veiligheidsrisico's: Onjuist afgehandelde uitzonderingen kunnen mogelijk gevoelige informatie onthullen of beveiligingsproblemen in uw code veroorzaken. Het is dus belangrijk om zorgvuldig met uitzonderingen om te gaan en te voorkomen dat er te veel informatie over uw programma vrijkomt.
Over het geheel genomen wegen de voordelen van het afhandelen van uitzonderingen in Python zwaarder dan de nadelen, maar het is belangrijk om het oordeelkundig en zorgvuldig te gebruiken om de codekwaliteit en programmabetrouwbaarheid te behouden.
Dit artikel is bijgedragen door Nikhil Kumar Singh (nickzuck_007)