Python Undtagelse Håndtering Brug af prøve, undtagen og endelig udsagn

I denne vejledning lærer du, hvordan du håndterer undtagelser i dit Python-program ved hjælp af try, undtagen og endelig udsagn ved hjælp af eksempler.

Video: Python Exception Handling (prøv … undtagen … endelig)

Undtagelser i Python

Python har mange indbyggede undtagelser, der hæves, når dit program støder på en fejl (noget i programmet går galt).

Når disse undtagelser forekommer, stopper Python-tolken den aktuelle proces og overfører den til opkaldsprocessen, indtil den håndteres. Hvis det ikke håndteres, går programmet ned.

Lad os for eksempel overveje et program, hvor vi har en funktion, Ader kalder funktion B, som igen kalder funktion C. Hvis en undtagelse forekommer i funktion, Cmen ikke håndteres C, overføres undtagelsen til Bog derefter til A.

Hvis det aldrig håndteres, vises en fejlmeddelelse, og vores program stopper pludselig uventet.

Fanger undtagelser i Python

I Python kan undtagelser håndteres ved hjælp af en tryerklæring.

Den kritiske operation, der kan skabe en undtagelse, er placeret inde i tryklausulen. Koden, der håndterer undtagelserne, er skrevet i exceptklausulen.

Vi kan således vælge, hvilke operationer der skal udføres, når vi har fanget undtagelsen. Her er et simpelt eksempel.

 # 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)

Produktion

Posten er en Ups! fandt sted. Næste post. Posten er 0 Ups! opstod. Næste post. Posten er 2 Den gensidige på 2 er 0,5

I dette program løber vi gennem værdierne i listen randomList. Som tidligere nævnt placeres den del, der kan forårsage en undtagelse, inde i tryblokken.

Hvis der ikke forekommer nogen undtagelse, exceptspringes blokken over, og normal strøm fortsætter (for sidste værdi). Men hvis der sker en undtagelse, fanges den af exceptblokken (første og anden værdi).

Her udskriver vi navnet på undtagelsen ved hjælp af exc_info()funktionen inde i sysmodulet. Vi kan se, at aårsager ValueErrorog 0årsager ZeroDivisionError.

Da enhver undtagelse i Python arver fra baseklassen Exception, kan vi også udføre ovenstående opgave på følgende måde:

 # 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)

Dette program har samme output som ovenstående program.

Fange specifikke undtagelser i Python

I ovenstående eksempel nævnte vi ingen specifik undtagelse i exceptklausulen.

Dette er ikke en god programmeringspraksis, da det fanger alle undtagelser og håndterer alle sager på samme måde. Vi kan specificere, hvilke undtagelser en exceptklausul skal fange.

En tryklausul kan have et vilkårligt antal exceptklausuler til at håndtere forskellige undtagelser, men kun en vil blive udført, hvis en undtagelse forekommer.

Vi kan bruge en gruppe værdier til at angive flere undtagelser i en undtagelsesklausul. Her er et eksempel på en pseudokode.

 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

At hæve undtagelser i Python

I Python-programmering hæves undtagelser, når der opstår fejl ved kørsel. Vi kan også manuelt hæve undtagelser ved hjælp af raisenøgleordet.

Vi kan valgfrit overføre værdier til undtagelsen for at afklare, hvorfor denne undtagelse blev rejst.

 >>> 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 prøv med andet klausul

I nogle situationer vil du muligvis køre en bestemt kodeblok, hvis kodeblokken inde trykørte uden fejl. I disse tilfælde kan du bruge det valgfri elsenøgleord sammen med tryudsagnet.

Bemærk : Undtagelser i den anden klausul håndteres ikke af den foregående undtagen klausuler.

Lad os se på et eksempel:

 # 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)

Produktion

Hvis vi passerer et ulige tal:

 Indtast et tal: 1 Ikke et lige tal!

Hvis vi passerer et lige tal, beregnes og vises det gensidige.

 Indtast et tal: 4 0,25

Men hvis vi passerer 0, får vi, ZeroDivisionErrorda kodeblokken indeni elseikke håndteres af foregående 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()

Denne type konstruktion sørger for, at filen lukkes, selvom der sker en undtagelse under programudførelsen.

Interessante artikler...