Articles

Python Exception Handling Using try, except and finally statement

Exceptions in Python

Python heeft veel ingebouwde exceptions die worden opgeworpen wanneer je programma een fout tegenkomt (iets in het programma gaat fout).

Wanneer deze exceptions optreden, stopt de Python-interpreter het huidige proces en geeft het door aan het aanroepende proces totdat het is afgehandeld. Als deze niet worden afgehandeld, zal het programma crashen.

Nemen we bijvoorbeeld een programma waarin we een functie A hebben die functie B aanroept, die op zijn beurt functie C aanroept. Als een exceptie optreedt in functie C maar niet wordt afgehandeld in C, gaat de exceptie naar B en vervolgens naar A.

Als de exceptie nooit wordt afgehandeld, verschijnt er een foutmelding en komt ons programma onverwachts tot stilstand.

Uitzonderingen opvangen in Python

In Python kunnen uitzonderingen worden afgehandeld met behulp van een try verklaring.

De kritische bewerking die een uitzondering kan oproepen wordt in de try clausule geplaatst. De code die de uitzonderingen afhandelt, staat in de except-clausule.

We kunnen dus kiezen welke bewerkingen we uitvoeren als we de uitzondering hebben opgevangen. Hier volgt een eenvoudig voorbeeld.

Uitvoer

In dit programma lopen we door de waarden van de randomList-lijst. Zoals eerder vermeld, wordt het gedeelte dat een uitzondering kan veroorzaken in het try blok geplaatst.

Als er geen uitzondering optreedt, wordt het except blok overgeslagen en gaat de normale stroom verder (voor de laatste waarde). Maar als er een uitzondering optreedt, wordt deze opgevangen door het except blok (eerste en tweede waarde).

Hier drukken we de naam van de uitzondering af met behulp van de exc_info() functie binnen sys module. We kunnen zien dat aValueError veroorzaakt en 0ZeroDivisionError veroorzaakt.

Omdat elke uitzondering in Python erft van de basis Exception klasse, kunnen we de bovenstaande taak ook op de volgende manier uitvoeren:

Dit programma heeft dezelfde uitvoer als het bovenstaande programma.

Specifieke uitzonderingen in Python opvangen

In het bovenstaande voorbeeld hebben we geen specifieke uitzondering genoemd in de except clausule.

Dit is geen goede programmeerpraktijk, omdat het alle uitzonderingen zal opvangen en elk geval op dezelfde manier zal behandelen. We kunnen specificeren welke uitzonderingen een except clausule moet afvangen.

Een try clausule kan een willekeurig aantal except clausules hebben om verschillende uitzonderingen af te handelen, echter, er zal er maar één worden uitgevoerd in het geval dat een uitzondering zich voordoet.

We kunnen een tupel van waarden gebruiken om meerdere uitzonderingen in een except-clausule op te geven. Hier is een voorbeeld pseudo code.

try: # do something passexcept ValueError: # handle ValueError exception passexcept (TypeError, ZeroDivisionError): # handle multiple exceptions # TypeError and ZeroDivisionError passexcept: # handle all other exceptions pass

Raising Exceptions in Python

In Python programmeren, worden exceptions opgewekt wanneer er fouten optreden tijdens runtime. We kunnen ook handmatig uitzonderingen oproepen met behulp van het raise sleutelwoord.

We kunnen optioneel waarden aan de uitzondering doorgeven om te verduidelijken waarom die uitzondering is opgeworpen.

Python try met else clause

In sommige situaties wil je misschien een bepaald blok code uitvoeren als het codeblok binnen try zonder fouten is uitgevoerd. Voor deze gevallen kunt u het optionele else sleutelwoord gebruiken met het try statement.

Note: Uitzonderingen in de else clausule worden niet behandeld door de voorafgaande except clausules.

Laten we eens naar een voorbeeld kijken:

Uitvoer

Als we een oneven getal doorgeven:

Enter a number: 1Not an even number!

Als we een even getal doorgeven, wordt het reciproke berekend en weergegeven.

Enter a number: 40.25

Als we echter 0 doorgeven, krijgen we ZeroDivisionError omdat het codeblok binnen else niet wordt afgehandeld door het voorafgaande except.

Python try…finally

Het try statement in Python kan een optionele finally clausule hebben. Deze clausule wordt hoe dan ook uitgevoerd, en wordt over het algemeen gebruikt om externe bronnen vrij te geven.

We kunnen bijvoorbeeld via het netwerk verbonden zijn met een extern datacenter of werken met een bestand of een Graphical User Interface (GUI).

In al deze omstandigheden moeten we de bron opruimen voordat het programma tot stilstand komt, of het nu succesvol is verlopen of niet. Deze acties (het sluiten van een bestand, GUI of het verbreken van de verbinding met het netwerk) worden uitgevoerd in de finally clausule om de uitvoering te garanderen.

Hier volgt een voorbeeld van bestandsbewerkingen om dit te illustreren.

try: f = open("test.txt",encoding = 'utf-8') # perform file operationsfinally: f.close()

Dit type construct zorgt ervoor dat het bestand wordt gesloten, zelfs als er tijdens de uitvoering van het programma een uitzondering optreedt.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *