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, A
amely 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, C
de 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 try
utasítás segítségével kezelhetők .
Az a kritikus művelet, amely kivételt jelenthet, a try
záradékba kerül. A kivételeket kezelő kódot a except
zá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 try
blokk belsejébe kerül .
Ha nem történik kivétel, a except
blokk 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 except
blokk fogja el (első és második érték).
Itt kinyomtatjuk a kivétel nevét a modulon exc_info()
belüli függvény sys
segítségével. Láthatjuk, hogy a
okok ValueError
és 0
okok 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 except
zá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 except
záradékokat kell kifogni.
Egy try
záradékban tetszőleges számú except
zá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 raise
kulcsszó 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 try
hibátlanul fut. Ezekben az esetekben az opcionális else
kulcsszót használhatja az try
utasí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 else
lé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.