Kivételt képez az az esemény, amely a program futtatása során felmerül a program normál folyamatának leállítására vagy megváltoztatására. Például egy hiba kivételt jelent. A többi programozási nyelvhez hasonlóan a Python is sok beépített kivételt tartalmaz. Ezek a kivételek akkor merülnek fel, ha a program futtatásakor hiba lép fel. A hiba típusa határozza meg, hogy mely kivételt kell felvetni. Kivétel bekövetkezésekor a Python tolmács ellenőrzi, hogy a kivételt kezelik-e; ha nem, akkor leállítja a programot. Ez a cikk különféle példákon keresztül ismerteti a Python kivételeit.
Beépített Python kivételek
Amint arról korábban beszéltünk, a Python sok beépített kivétellel rendelkezik, amelyek akkor merülnek fel, amikor egy program végrehajtása során hiba lép fel. Minden kivétel egy „Kivétel” alaposztályból származik. A következők tartalmaznak néhány beépített Python-kivételt, az egyes kivételtípusok rövid leírása mellett:
Kivétel | Leírás |
---|---|
Kivétel | Minden kivétel ebből az osztályból származik. |
ImportError | Ez a kivétel akkor merül fel, ha egy adott modult importál, és nem található. |
EOFError | Ez a fájlvégi kivétel. Ez a kivétel a fájl végének elérésekor következik be. |
ZeroDivisionError | Ez a kivétel akkor merül fel, ha egy számot elosztunk nullával. |
KeyError | Ez a kivétel akkor merül fel, ha megadnak vagy használnak egy bizonyos kulcsot, amely nincs meghatározva egy szótárban. |
IndexError | Ez a kivétel akkor merül fel, amikor megkísérelték elérni a tartományon kívül eső sorozatindexet. |
FloatingPointError | Ez a kivétel akkor merül fel, ha egy lebegőpontos művelet sikertelen. |
Ez a Python néhány beépített kivétele. Kérjük, látogassa meg a hivatalos dokumentációt a beépített kivételek használatáról a Pythonban, amely a https: // docs címen található.piton.org / 3 / könyvtár / kivételek.html.
Kivételhasználat a Pythonban
A Pythonban található kivételeket a try utasítás segítségével kezeljük. Az a kóddarab, amely kivételt dobhat vagy felvethet, egy try blokkban valósul meg. A try blokk mellett egy kivétel blokk van megvalósítva a kivétel kezelésére. A kivétel blokkban elkapjuk a kivételt, és eldöntjük, hogy milyen műveletet hajtsunk végre, amikor az adott kivétellel találkozunk. A try és kivétel blokkok írásának szintaxisa a következő:
próbáld ki:hajtsa végre a műveletet vagy a funkciót
kivéve:
funkcionalitás a kivétel kezeléséhez
Most egy egyszerű kódot valósítunk meg a Python szkriptben a try és kivételével a blokkok használatával.
Itt egy 'name' változót nyomtatunk, amely nincs meghatározva. Ez kivételt vet fel a kivétel blokkban.
#próbáld ki a blokkotpróbáld ki:
nyomtatott név)
# kivéve a blokkot
kivéve:
nyomtatás ("Kivétel történt")
Kimenet
Ha nem történik kivétel, akkor csak a try blokk kerül végrehajtásra. A kivétel blokkban ki van nyomtatva, hogy kivétel történt.
Nézzünk meg egy másik példát, ahol meghatározzuk a névváltozót:
# a névváltozó meghatározásaname = "Mark"
#próbáld ki a blokkot
próbáld ki:
nyomtatott név)
# kivéve a blokkot
kivéve:
nyomtatás ("Kivétel történt")
Kimenet
A fenti példában a try blokk végrehajtásra kerül, és a kivétel blokk kihagyásra kerül, mert a program nem vet fel kivételt. A blokkokat kivéve annyit definiálhatunk a programunkban, amennyit csak akarunk. Minden blokk kivételével egyfajta kivételt kezel.
#próbáld ki a blokkotpróbáld ki:
nyomtatott név)
# kivéve a blokkot, hogy elkapja a név hibát
kivéve NameError:
print ("A változó nincs meghatározva")
# kivéve a blokkot
kivéve:
nyomtatás ("Valami hiba történt, kivéve a névhibát")
Kimenet
A Pythonban az Exception az összes kivétel alaposztálya. Ahelyett, hogy beírnánk egy adott kivétel nevét a kivétel blokkba, egyszerűen írhatjuk a „Kivétel” kifejezést, és mindenfajta kivételt ilyen módon elkaphatunk.
#próbáld ki a blokkotpróbáld ki:
nyomtatott név)
# kivéve a blokkot, hogy elkapja a hibát
kivéve az exp:
nyomtatás (exp.__osztály__)
# kivéve a blokkot
kivéve:
nyomtatás ("Valami hiba történt, kivéve a névhibát")
Kimenet
Az exp.A __class__ a kivétel osztályának nevét adja vissza.
Hasonlóképpen nézzünk meg egy példát a „ZeroDivisionError” osztályra.
#próbáld ki a blokkotpróbáld ki:
x = 1/0
nyomtatás (x)
# kivéve a blokkot, hogy elkapja a hibát
kivéve az exp:
nyomtatás (exp.__osztály__)
# kivéve a blokkot
kivéve:
nyomtatás ("Valami hiba történt, kivéve a névhibát")
Kimenet
A másik blokk
A másik blokkot a try és kivétel blokkokkal együtt használják. A else blokk meghatározza a kódrészletet, amelyet akkor hajtanak végre, ha a try blokk sikeresen végrehajtódik, és nem történik hiba. Előfordulhat, hogy a próbablokk sikeres végrehajtása után üzenetet kell nyomtatnia vagy funkciót kell végrehajtania. Emiatt a try blokkot kivéve a try és a block blokkokat megvalósíthatjuk.
Ebben a példában a másik blokkot implementáljuk a Python szkriptünkben.
#próbáld ki a blokkotpróbáld ki:
x = 1/2
nyomtatás (x)
# kivéve a blokkot, hogy elkapja a hibát
kivéve az exp:
nyomtatás (exp.__osztály__)
#más blokk végrehajtása
más:
nyomtatás ("Minden rendben ment")
Kimenet
A másik blokk a try blokk sikeres végrehajtását követően kerül végrehajtásra.
Most nézzünk meg egy másik példát az else blokk segítségével.
#próbáld ki a blokkotpróbáld ki:
name = "Mark"
# kivéve a blokkot, hogy elkapja a hibát
kivéve az exp:
nyomtatás (exp.__osztály__)
#más blokk végrehajtása
más:
nyomtatás ("A név:", név)
Kimenet
A fenti példában a névváltozó a try blokkban van meghatározva, és a másik blokkban van kinyomtatva.
Az utolsó blokk
A végül blokk tartalmazza azt a kóddarabot, amelyet végre kell hajtani, függetlenül attól, hogy a try blokk kivételt jelent-e. Az utolsó blokk opcionális, és a try blokkkal van deklarálva. Például, ha megnyitottunk egy szöveges fájlt a try blokk elolvasására, és ez hibát vagy kivételt vet fel, akkor jobb, ha a fájlt az utolsó blokkba csatoljuk, még akkor is, ha a hiba bekövetkezik. Vezessük be a Python szkriptünk utolsó blokkját.
#próbáld ki a blokkotpróbáld ki:
nyomtatás (my_dict)
# kivéve a blokkot, hogy elkapja a hibát
kivéve az exp:
nyomtatás (exp.__osztály__)
# végre az utolsó blokkot
végül:
print ("Ez az utolsó blokk")
print ("Az utolsó blokk végrehajtásra kerül")
Kimenet
A kimeneten látható, hogy a try blokk kivételt jelent. Az utolsó blokkot azonban a végén hajtják végre.
Most nyissunk meg egy szövegfájlt a try blokkban, amely kivételt vet fel, míg a fájl az utolsó blokkba van zárva.
#próbáld ki a blokkotpróbáld ki:
fileObj = open ("tanulóm.xml "," r ")
fileObj.keresni (-2)
nyomtat (fileObj.readlines ())
# kivéve a blokkot
kivéve az exp:
nyomtatás (exp.__osztály__)
# végre az utolsó blokkot
végül:
fileObj.Bezárás()
nyomtatás ("A fájl sikeresen bezárult")
Kimenet
Amint láthatja, az értékhibától függetlenül a fájl sikeresen bezárásra került a végső blokkon belül.
Emeljen kivételt
Bár a hibák automatikusan felmerülnek, amikor hiba lép fel, a Pythonban manuálisan is emelhet kivételeket. A emel kulcsszó a kivétel felvetésére vagy eldobására szolgál.
Most felvetünk néhány kivételt az emelés kulcsszóval. A következő példában az if feltétel megvalósul a nem negatív számok ellenőrzésére. Ha létezik nem negatív szám, akkor a „Nem negatív számok nem engedélyezettek” kivétel felmerül.
# két számváltozó deklarálásanum1 = 20
num2 = -10
ha ((szám1<0) | (num2<0)):
emelés Kivétel ("Nem negatív számok nem megengedettek")
más:
nyomtatás (num1 + num2)
Kimenet
Következtetés
Kivétel történik a futás közbeni hibára adott válaszként. A Pythonban a try és kivétel blokkok használatával kezelhetjük a kivételeket. Ez a cikk különféle példákon keresztül elmagyarázta, hogyan lehet a Pythonban felhasználni a kivételeket.