Afhandeling van Python-uitzonderingen Met behulp van try, behalve en tenslotte statement

In deze zelfstudie leert u hoe u met uitzonderingen in uw Python-programma omgaat met de beweringen try, behalve en tenslotte met behulp van voorbeelden.

Video: Afhandeling van Python-uitzonderingen (probeer … behalve … eindelijk)

Uitzonderingen in Python

Python heeft veel ingebouwde uitzonderingen die worden veroorzaakt wanneer uw programma een fout tegenkomt (er gaat iets mis in het programma).

Als deze uitzonderingen zich voordoen, stopt de Python-interpreter het huidige proces en geeft het door aan het aanroepproces totdat het is afgehandeld. Als het niet wordt afgehandeld, loopt het programma vast.

Laten we bijvoorbeeld eens kijken naar een programma waarin we een functie hebben die een functie Aaanroept B, die op zijn beurt een functie aanroept C. Als er een uitzondering optreedt in de functie Cmaar niet wordt afgehandeld C, wordt de uitzondering doorgegeven aan Ben vervolgens aan A.

Als dit nooit wordt afgehandeld, wordt er een foutmelding weergegeven en komt ons programma plotseling onverwacht tot stilstand.

Uitzonderingen opvangen in Python

In Python kunnen uitzonderingen worden afgehandeld met behulp van een tryinstructie.

De kritieke bewerking die een uitzondering kan veroorzaken, wordt in de tryclausule geplaatst. De code die de uitzonderingen afhandelt, staat in de exceptclausule.

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

 # import module sys to get the type of exception import sys randomList = ('a', 0, 2) for entry in randomList: try: print("The entry is", entry) r = 1/int(entry) break except: print("Oops!", sys.exc_info()(0), "occurred.") print("Next entry.") print() print("The reciprocal of", entry, "is", r)

Uitvoer

De inzending is een Oeps! heeft plaatsgevonden. Volgende invoer. De invoer is 0 Oeps! opgetreden. Volgende invoer. De invoer is 2 Het omgekeerde van 2 is 0,5

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

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

Hier drukken we de naam van de uitzondering af met behulp van de exc_info()functie in de sysmodule. We kunnen die aoorzaken ValueErroren 0oorzaken zien ZeroDivisionError.

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

 # import module sys to get the type of exception import sys randomList = ('a', 0, 2) for entry in randomList: try: print("The entry is", entry) r = 1/int(entry) break except Exception as e: print("Oops!", e.__class__, "occurred.") print("Next entry.") print() print("The reciprocal of", entry, "is", r)

Dit programma heeft dezelfde output als het bovenstaande programma.

Specifieke uitzonderingen in Python opvangen

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

Dit is geen goede programmeerpraktijk, aangezien alle uitzonderingen worden opgevangen en elke case op dezelfde manier wordt behandeld. We kunnen specificeren welke uitzonderingen een exceptclausule moet opvangen.

Een tryclausule kan een willekeurig aantal exceptclausules hebben om verschillende uitzonderingen af ​​te handelen, maar er wordt er maar één uitgevoerd in het geval er zich een uitzondering voordoet.

We kunnen een tupel waarden gebruiken om meerdere uitzonderingen in een exceptieclausule op te geven. Hier is een voorbeeld van een pseudocode.

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

Uitzonderingen maken in Python

In Python-programmering worden uitzonderingen gemaakt wanneer fouten optreden tijdens runtime. We kunnen ook handmatig uitzonderingen instellen met behulp van het raisetrefwoord.

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

 >>> raise KeyboardInterrupt Traceback (most recent call last):… KeyboardInterrupt >>> raise MemoryError("This is an argument") Traceback (most recent call last):… MemoryError: This is an argument >>> try:… a = int(input("Enter a positive integer: "))… if a <= 0:… raise ValueError("That is not a positive number!")… except ValueError as ve:… print(ve)… Enter a positive integer: -2 That is not a positive number!

Python probeer met else-clausule

In sommige situaties wilt u misschien een bepaald codeblok uitvoeren als het codeblok binnenin tryzonder fouten is uitgevoerd. Voor deze gevallen kunt u het optionele elsetrefwoord gebruiken bij de tryverklaring.

Opmerking : uitzonderingen in de else-clausule worden niet afgehandeld door de voorgaande except-clausules.

Laten we naar een voorbeeld kijken:

 # program to print the reciprocal of even numbers try: num = int(input("Enter a number: ")) assert num % 2 == 0 except: print("Not an even number!") else: reciprocal = 1/num print(reciprocal)

Uitvoer

Als we een oneven getal passeren:

 Voer een getal in: 1 Geen even getal!

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

 Voer een getal in: 4 0,25

Als we echter 0 passeren, krijgen we ZeroDivisionErroromdat het codeblok binnenin elseniet wordt afgehandeld door voorafgaande except.

 Enter a number: 0 Traceback (most recent call last): File "", line 7, in reciprocal = 1/num ZeroDivisionError: division by zero

Python try… finally

The try statement in Python can have an optional finally clause. This clause is executed no matter what, and is generally used to release external resources.

For example, we may be connected to a remote data center through the network or working with a file or a Graphical User Interface (GUI).

In all these circumstances, we must clean up the resource before the program comes to a halt whether it successfully ran or not. These actions (closing a file, GUI or disconnecting from network) are performed in the finally clause to guarantee the execution.

Here is an example of file operations to illustrate this.

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

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

Interessante artikelen...