Š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ą, A
kuri iškviečia funkciją B
, kuri savo ruožtu iškviečia funkciją C
. Jei išimtis įvyksta veikiant, C
bet ji nėra tvarkoma C
, išimtis pereina į B
ir 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 try
teiginį.
Kritinė operacija, dėl kurios gali kilti išimtis, įtraukiama į try
sąlygą. Kodas, kuris tvarko išimtis, yra parašytas except
punkte.
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 į try
bloko vidų .
Jei nėra išimties, except
blokas praleidžiamas ir tęsiasi įprastas srautas (paskutinei vertei). Bet jei pasitaiko kokia nors išimtis, ją užfiksuoja except
blokas (pirmoji ir antroji reikšmės).
Čia atspausdiname išimties pavadinimą naudodamiesi exc_info()
funkcija sys
modulio viduje . Mes galime pamatyti a
priežastis ValueError
ir 0
priežastis ZeroDivisionError
.
Kadangi kiekviena „Python“ išimtis paveldima iš bazinės Exception
klasė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 except
sąlygoje.
Tai nėra gera programavimo praktika, nes ji pagaus visas išimtis ir visus atvejus spręs vienodai. Galime nurodyti, kurias išimtis except
turėtų sugauti sąlyga.
try
Sąlyga gali turėti bet kokį skaičių except
są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 raise
raktinį ž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 try
be klaidų. Tokiais atvejais else
su try
sakiniu 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, ZeroDivisionError
nes viduje esantis kodo blokas else
nė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
try
Python teiginys gali turėti papildomą finally
są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 finally
są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.