„Python“ išimčių tvarkymas Naudojant try, išskyrus ir galiausiai pareiškimą

Šioje pamokoje sužinosite, kaip elgtis su „Python“ programoje taikomomis išimtimis naudojant „try“, išskyrus ir „galiausiai“ teiginius, naudojant pavyzdžius.

Vaizdo įrašas: „Python“ išimčių tvarkymas (pabandykite… išskyrus… pagaliau)

„Python“ išimtys

„Python“ turi daug integruotų išimčių, kurios iškyla, kai jūsų programa aptinka klaidą (kažkas programoje negerai).

Kai atsiranda šių išimčių, „Python“ vertėjas sustabdo dabartinį procesą ir perduoda jį iškvietimo procesui, kol jis bus tvarkomas. Jei nebus tvarkoma, programa užstrigs.

Pvz., Apsvarstykime programą, kurioje turime funkciją, Akuri iškviečia funkciją B, kuri savo ruožtu iškviečia funkciją C. Jei išimtis įvyksta veikiant, Cbet ji nėra tvarkoma C, išimtis pereina į Bir tada A.

Jei niekada netvarkoma, rodomas klaidos pranešimas ir mūsų programa staiga netikėtai sustoja.

Išimčių gaudymas „Python“

„Python“ išimtis galima tvarkyti naudojant tryteiginį.

Kritinė operacija, dėl kurios gali kilti išimtis, įtraukiama į trysąlygą. Kodas, kuris tvarko išimtis, yra parašytas exceptpunkte.

Taigi mes galime pasirinkti, kokias operacijas atlikti, kai sulauksime išimties. Štai paprastas pavyzdys.

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

Rezultatas

Įrašas yra Oi! įvyko. Kitas įrašas. Įrašas yra „Oi! įvyko. Kitas įrašas. Įrašas yra 2. Abipusis 2 yra 0,5

Šioje programoje mes apžvelgiame „randomList“ sąrašo reikšmes. Kaip minėta anksčiau, dalis, galinti sukelti išimtį, dedama į trybloko vidų .

Jei nėra išimties, exceptblokas praleidžiamas ir tęsiasi įprastas srautas (paskutinei vertei). Bet jei pasitaiko kokia nors išimtis, ją užfiksuoja exceptblokas (pirmoji ir antroji reikšmės).

Čia atspausdiname išimties pavadinimą naudodamiesi exc_info()funkcija sysmodulio viduje . Mes galime pamatyti apriežastis ValueErrorir 0priežastis ZeroDivisionError.

Kadangi kiekviena „Python“ išimtis paveldima iš bazinės Exceptionklasės, aukščiau nurodytą užduotį taip pat galime atlikti taip:

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

Šios programos išvestis yra tokia pati kaip ir pirmiau nurodytos programos.

Konkrečių išimčių gavimas „Python“

Ankstesniame pavyzdyje mes nenurodėme jokios konkrečios išimties exceptsąlygoje.

Tai nėra gera programavimo praktika, nes ji pagaus visas išimtis ir visus atvejus spręs vienodai. Galime nurodyti, kurias išimtis exceptturėtų sugauti sąlyga.

trySąlyga gali turėti bet kokį skaičių exceptsąlygų dirbti įvairių išimčių, tačiau tik vienas bus vykdomas tuo atveju išimtis įvyksta.

Norėdami naudoti kelias išimtis, išskyrus sąlygą, galime naudoti keletą verčių. Čia yra pseudo kodo pavyzdys.

 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

Išimčių didinimas „Python“

Programuojant „Python“, išimtys iškyla, kai vykdymo metu atsiranda klaidų. Taip pat naudodami raiseraktinį žodį galime rankiniu būdu išimtis .

Mes galime pasirinktinai perduoti išimties vertes, kad paaiškintume, kodėl ta išimtis buvo iškelta.

 >>> 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“ bandykite su sąlyga „else“

Kai kuriose situacijose galite paleisti tam tikrą kodo bloką, jei viduje esantis kodo blokas vykdomas trybe klaidų. Tokiais atvejais elsesu trysakiniu galite naudoti pasirenkamą raktinį žodį .

Pastaba : Kito straipsnio išimtys nėra nagrinėjamos ankstesnėse sąlygose, išskyrus sąlygas.

Pažvelkime į pavyzdį:

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

Rezultatas

Jei praleisime nelyginį skaičių:

 Įveskite skaičių: 1 Ne lyginis skaičius!

Jei perduodame lyginį skaičių, apskaičiuojamas ir parodomas abipusis skaičius.

 Įveskite skaičių: 4 0,25

Tačiau, jei išlaikysime 0, gausime, ZeroDivisionErrornes viduje esantis kodo blokas elsenėra tvarkomas prieš tai except.

 Įveskite skaičių: 0 „Traceback“ (paskutinis paskutinis skambutis paskutinis): „7“ eilutės failas „reciprocal“ = 1 / num ZeroDivisionError: dalijimasis su nuline

„Python“ pabandykite … pagaliau

tryPython teiginys gali turėti papildomą finallysąlygą. Ši sąlyga vykdoma nesvarbu, ir paprastai naudojama išoriniams ištekliams išlaisvinti.

Pavyzdžiui, mes galime būti prijungti prie nuotolinio duomenų centro per tinklą arba dirbti su byla ar grafine vartotojo sąsaja (GUI).

Visomis šiomis aplinkybėmis turime išvalyti išteklius, kol programa sustos, nesvarbu, ar ji sėkmingai vykdyta, ar ne. Šie veiksmai (failo uždarymas, GUI arba atsijungimas nuo tinklo) atliekami finallysąlygoje, kad būtų garantuotas vykdymas.

Tai iliustruoja failo operacijų pavyzdys.

 try: f = open("test.txt",encoding = 'utf-8') # perform file operations finally: f.close()

Šio tipo konstrukcija užtikrina, kad failas yra uždarytas, net jei vykdant programą įvyksta išimtis.

Įdomios straipsniai...