Python kivételkezelés A try, kivétel és végül utasítás használatával

Ebben az oktatóanyagban megtudhatja, hogyan kell kezelni a kivételeket a Python programban a try, kivéve és végül utasítások segítségével példák segítségével.

Videó: Python kivételkezelés (próbáld ki … kivéve… végül)

Kivételek a Pythonban

A Python sok beépített kivétellel rendelkezik, amelyek akkor merülnek fel, amikor a program hibát észlel (valami hibás a programban).

Amikor ezek a kivételek előfordulnak, a Python tolmács leállítja az aktuális folyamatot, és addig továbbítja a hívási folyamatnak, amíg azt nem kezelik. Ha nem kezelik, a program összeomlik.

Vegyünk például egy programot, ahol van egy függvényünk, Aamely hívja a függvényt B, amely viszont hívja a függvényt C. Ha egy kivétel bekövetkezik a függvényben, Cde nem kezelik C, akkor a kivétel átmegy a Bés a továbbiakban A.

Ha soha nem kezelik, hibaüzenet jelenik meg, és programunk hirtelen váratlan leáll.

Kivételek befogása a Pythonban

A Pythonban a kivételek egy tryutasítás segítségével kezelhetők .

Az a kritikus művelet, amely kivételt jelenthet, a tryzáradékba kerül. A kivételeket kezelő kódot a exceptzáradék írja.

Így kiválaszthatjuk, hogy milyen műveleteket hajtsunk végre, ha elfogadtuk a kivételt. Itt egy egyszerű példa.

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

Kimenet

A bejegyzés egy Hoppá! történt. Következő bejegyzés. A bejegyzés 0 Hoppá! történt. Következő bejegyzés. A bejegyzés 2 A 2 kölcsönös értéke 0,5

Ebben a programban végignézzük a randomList lista értékeit. Mint korábban említettük, az a rész, amely kivételt okozhat, a tryblokk belsejébe kerül .

Ha nem történik kivétel, a exceptblokk kihagyásra kerül, és a normál folyamat folytatódik (az utolsó értékhez). De ha valamilyen kivétel bekövetkezik, akkor azt a exceptblokk fogja el (első és második érték).

Itt kinyomtatjuk a kivétel nevét a modulon exc_info()belüli függvény syssegítségével. Láthatjuk, hogy aokok ValueErrorés 0okok ZeroDivisionError.

Mivel a Pythonban minden kivétel öröklődik az alaposztálytól Exception, a fenti feladatot a következő módon is elvégezhetjük:

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

Ennek a programnak ugyanaz a kimenete, mint a fenti programnak.

Konkrét kivételek befogása a Pythonban

A fenti példában a exceptzáradékban nem említettünk konkrét kivételt .

Ez nem jó programozási gyakorlat, mivel minden kivételt befog és minden esetet ugyanúgy kezel. Megadhatjuk, hogy mely exceptzáradékokat kell kifogni.

Egy tryzáradékban tetszőleges számú exceptzáradék lehet a különféle kivételek kezelésére, azonban kivétel esetén csak egyet hajtanak végre.

Több értéket használhatunk több kivétel megadására egy kivétel záradékban. Itt van egy pszeudokód.

 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

Kivételek növelése a Pythonban

A Python programozásban kivételek merülnek fel, ha futás közben hibák lépnek fel. A kivételeket a raisekulcsszó segítségével manuálisan is felvethetjük .

Opcionálisan átadhatunk értékeket a kivételnek, hogy tisztázzuk, miért emelték ezt a kivételt.

 >>> 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óbáljon más záradékkal

Bizonyos esetekben érdemes futtatnia egy bizonyos kódblokkot, ha a kódblokk tryhibátlanul fut. Ezekben az esetekben az opcionális elsekulcsszót használhatja az tryutasítással.

Megjegyzés : Az else záradékban szereplő kivételeket az előzőek nem kezelik, kivéve a záradékokat.

Nézzünk meg egy példát:

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

Kimenet

Ha páratlan számot adunk át:

 Írjon be egy számot: 1 Nem páros szám!

Ha páros számot adunk át, a reciprokot kiszámoljuk és megjelenítjük.

 Írjon be egy számot: 4 0,25

Ha azonban 0-t adunk meg, akkor azt kapjuk ZeroDivisionError, hogy a belsejében elselévő kódblokkot nem kezeljük megelőzéssel 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()

Ez a típusú konstrukció gondoskodik arról, hogy a fájl bezáruljon, még akkor is, ha a program végrehajtása során kivétel történik.

érdekes cikkek...