Pythoni erandite käsitlemine Kasutades try, va ja lõpuks lauset

Selles õpetuses saate teada, kuidas Python programmis erandeid käsitleda näidete abil try, va ja lõpuks lausetega.

Video: Pythoni erandkäsitlus (proovige … välja arvatud … lõpuks)

Erandid Pythonis

Pythonil on palju sisseehitatud erandeid, mis tekivad siis, kui teie programm tuvastab vea (programmis midagi läheb valesti).

Nende erandite ilmnemisel peatab Pythoni tõlk praeguse protsessi ja edastab selle helistamisprotsessile, kuni see on käsitletud. Kui seda ei käsitleta, jookseb programm kokku.

Vaatleme näiteks programmi, kus meil on funktsioon, Amis kutsub funktsiooni B, mis omakorda kutsub funktsiooni C. Kui funktsioonis esineb erand, Ckuid seda ei käsitleta C, läheb erand edasi Bja seejärel A.

Kui seda kunagi ei tehta, kuvatakse tõrketeade ja meie programm peatub ootamatult ootamatult.

Erandite püüdmine Pythonis

Pythonis saab erandeid käsitleda tryavalduse abil.

Kriitiline toiming, mis võib põhjustada erandi, paigutatakse tryklausli sisse. Kood, mis käsitleb erandeid, on kirjutatud exceptklauslisse.

Niisiis saame valida, milliseid toiminguid teha, kui oleme erandi saanud. Siin on lihtne näide.

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

Väljund

Kirje on Oih! toimunud. Järgmine kirje. Kirje on 0 Vabandust! tekkis. Järgmine kirje. Kirje on 2. 2 vastastik on 0,5

Selles programmis tutvume randomList loendi väärtustega. Nagu varem mainitud, paigutatakse osa, mis võib põhjustada erandi, tryploki sisse.

Kui erandit ei toimu, jäetakse exceptplokk vahele ja normaalne voog jätkub (viimase väärtuse jaoks). Kuid kui mõni erand ilmneb, haaratakse see exceptplokist (esimene ja teine ​​väärtus).

Siinkohal printime erandi nime, kasutades moodulisisest exc_info()funktsiooni sys. Näeme, mis apõhjustab ValueErrorja 0põhjustab ZeroDivisionError.

Kuna iga Pythoni erand pärandub baasklassist Exception, saame ülaltoodud ülesande täita ka järgmisel viisil:

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

Sellel programmil on sama väljund nagu ülaltoodud programmil.

Konkreetsete erandite püüdmine Pythonis

Eespool toodud näites ei maininud me exceptklauslis ühtegi konkreetset erandit .

See ei ole hea programmeerimistava, sest see haarab kinni kõik erandid ja tegeleb kõigi juhtumitega ühtemoodi. Saame täpsustada, milliseid erandeid exceptklausel peaks tabama.

tryKlausel võib olla suvaline arv exceptpunkte käsitseda erinevaid erandeid, aga ainult üks täidetakse juhul erand esineb.

Väärtuste hulga abil saame erandklauslis määrata mitu erandit. Siin on näide pseudokoodist.

 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

Erandite suurendamine Pythonis

Pythoni programmeerimisel tehakse erandeid, kui käituse ajal ilmnevad vead. Samuti võime raisemärksõna abil erandeid käsitsi tõsta .

Võime valikuliselt anda erandile väärtused, et selgitada, miks see erand tõsteti.

 >>> 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 proovige klausliga else

Mõnes olukorras võiksite käivitada teatud koodiploki, kui sees olev koodiplokk tryjooksis ilma tõrgeteta. Nendel juhtudel saate avaldusega kasutada valikulist elsemärksõna try.

Märkus . Eelnevad, välja arvatud klauslid, ei käsitle klausli muu erandeid.

Vaatame näidet:

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

Väljund

Kui läbime paaritu arvu:

 Sisestage arv: 1 Pole paarisarv!

Kui läbime paarisarvu, arvutatakse ja kuvatakse vastastikune.

 Sisestage number: 4 0,25

Kui aga möödume 0-st, saame, ZeroDivisionErrorkuna sisemist koodiplokki elseei käsitleta eelnevaga 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()

Seda tüüpi konstruktsioon tagab, et fail on suletud, isegi kui programmi käivitamisel ilmneb erand.

Huvitavad Artiklid...