Python Exception Handling Använda try, undantag och slutligen uttalande

I den här handledningen lär du dig hur du hanterar undantag i ditt Python-program med try, utom och slutligen uttalanden med hjälp av exempel.

Video: Python Exception Handling (prova … utom … äntligen)

Undantag i Python

Python har många inbyggda undantag som tas upp när ditt program stöter på ett fel (något i programmet går fel).

När dessa undantag inträffar stoppar Python-tolk den aktuella processen och skickar den till anropsprocessen tills den hanteras. Om det inte hanteras kommer programmet att krascha.

Låt oss till exempel överväga ett program där vi har en funktion Asom kallar funktion B, som i sin tur kallar funktion C. Om ett undantag förekommer i funktion Cmen inte hanteras C, övergår undantaget till Boch sedan till A.

Om det aldrig hanteras visas ett felmeddelande och vårt program stoppas plötsligt oväntat.

Fångar undantag i Python

I Python kan undantag hanteras med hjälp av ett tryuttalande.

Den kritiska åtgärden som kan leda till ett undantag placeras i tryklausulen. Koden som hanterar undantagen är skriven i exceptparagrafen.

Vi kan alltså välja vilka operationer som ska utföras när vi har fått undantaget. Här är ett enkelt exempel.

 # 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 är en Oops! inträffade. Nästa post. Inlägget är 0 Oj! inträffade. Nästa post. Inmatningen är 2 Det ömsesidiga av 2 är 0,5

I det här programmet går vi igenom värdena i listan randomList. Som tidigare nämnts placeras den del som kan orsaka ett undantag inuti tryblocket.

Om inget undantag inträffar excepthoppas blocket över och normalt flöde fortsätter (för sista värdet). Men om något undantag inträffar, fångas det av exceptblocket (första och andra värden).

Här skriver vi ut namnet på undantaget med exc_info()funktionen inuti sysmodulen. Vi kan se att aorsaker ValueErroroch 0orsaker ZeroDivisionError.

Eftersom varje undantag i Python ärver från basklassen Exceptionkan vi också utföra ovanstående uppgift på följande sätt:

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

Detta program har samma utgång som ovanstående program.

Fångar specifika undantag i Python

I exemplet ovan nämnde vi inget specifikt undantag i exceptklausulen.

Detta är inte en bra programmeringspraxis eftersom det kommer att fånga alla undantag och hantera alla fall på samma sätt. Vi kan ange vilka undantag en exceptklausul ska fånga.

En tryklausul kan ha valfritt antal exceptklausuler för att hantera olika undantag, men endast en kommer att köras om ett undantag inträffar.

Vi kan använda en tippel värden för att ange flera undantag i en undantagssats. Här är ett exempel på en pseudokod.

 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

Öka undantag i Python

I Python-programmering tas undantag upp när fel uppstår vid körning. Vi kan också manuellt höja undantag med hjälp av raisenyckelordet.

Vi kan valfritt överföra värden till undantaget för att klargöra varför detta undantag togs upp.

 >>> 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 försök med annat klausul

I vissa situationer kanske du vill köra ett visst kodblock om kodblocket inuti trysprang utan några fel. I dessa fall kan du använda det valfria elsenyckelordet med tryuttalandet.

Obs! Undantag i den andra klausulen hanteras inte av de föregående utom klausulerna.

Låt oss titta på ett exempel:

 # 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

Om vi ​​passerar ett udda tal:

 Ange ett nummer: 1 Inte ett jämnt nummer!

Om vi ​​passerar ett jämnt tal beräknas och återges det ömsesidiga.

 Ange ett nummer: 4 0,25

Men om vi passerar 0 får vi ZeroDivisionErroreftersom kodblocket inuti elseinte hanteras av föregå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()

Denna typ av konstruktion ser till att filen stängs även om ett undantag inträffar under programkörningen.

Intressanta artiklar...