Izņēmumu apstrāde ir jūsu spēja pielāgot un parādīt kļūdas ziņojumus tām programmas daļām, kuras nedarbojas.
Neatkarīgi no tā, vai veidojat vietni, veidojat API, moduli vai jebkuru citu produktu, izmantojot Python, spēja efektīvi apstrādāt izņēmumus ļauj skaidri norādīt kļūdas cēloni.
Šeit mēs apskatīsim, kā jūs varat rīkoties ar izņēmumiem Python.
Kā izņēmumu apstrāde darbojas Python
Kad jūs izvirzāt izņēmumus, jūs lūdzat Python izsaukt ziņojumu ikreiz, kad koda bloks neizdodas. Izņēmumu apstrāde ir tāda pati kā pavēle kādam mēģināt pacelt svaru. Un, ja viņi to nevar, viņiem vajadzētu par to paziņot.
Tomēr, lai palielinātu izņēmumu Python, jūs liksit Python izmēģināt un palaist noteiktu koda bloku. Ja šis bloks neizdodas, pēc tam varat lūgt Python izvirzīt noteiktu izņēmumu no neizdevušā koda.
Kad vajadzētu izmantot izņēmumus Python programmēšanā?
Vairumā gadījumu jūs varat maskēt standarta Python kļūdas, izmantojot izņēmumus. Bet jums ir jāsaglabā modrība, jo tas var izraisīt atkļūdošanas problēmas. Līdz ar to jums var būt grūti noskaidrot iespējamās kļūdas galveno cēloni.
Tāpēc, ja esat pietiekami pārbaudījis kodu, jums jāizmanto izņēmumi un esat pārliecināts, ka tas darbojas. Visbeidzot, labāk ir tos izmantot, lai novērstu iespējamos defektus, kas var rasties no lietotāja gala, nevis no paša koda.
Citiem vārdiem sakot, jūs varat izmantot izņēmumus kā brīdinājuma rīku, lai palīdzētu lietotājiem izmantot jūsu programmu.
Darbība ar Python izņēmumiem
Lai rīkotos ar izņēmumiem Python, vispirms kods jāiesaiņo a mēģiniet... izņemot bloķēt. Dažreiz jums var būt nepieciešams iekļaut a beidzot paziņojums par turpmāko darbību veikšanu atkarībā no jūsu vajadzībām.
Python izņēmumu kodēšanas koncepcija parasti izskatās šādi:
mēģiniet:
"izpildāms kods"
izņemot:
"kļūdas ziņojums"
Kā minēts iepriekš, jūs varat arī izmantot beidzot izņēmumu blokā. Bet kods, kuru jūs ierakstāt iekšā a beidzot klauzula ir neatkarīga un darbojas neatkarīgi no tā, vai ir izņēmums.
Būtībā tas ir noderīgi, ja jums ir cits koda bloks, kuru vēlaties palaist nepārtraukti neatkarīgi no tā, kas notiek mēģiniet... izņemot bloķēt.
Lūk, piemērs:
mēģiniet:
izdruka (9 + 6)
izņemot:
drukāt ("kļūdas ziņojums")
visbeidzot:
izdrukāt ("lūdzu, restartējiet")
Izeja:
15
lūdzu, restartējiet
Iepriekš minētajā kodā lūdzu, restartējiet darbojas nepārtraukti neatkarīgi no tā, vai ir kāds izņēmums.
An cits stāvoklis var sekot arī izņemot paziņojums, apgalvojums:
mēģiniet:
C = 2 + B
izņemot:
drukāt ("B ir jānosaka")
cits:
print (u "Pievienots veiksmīgi! Rezultāts ir% s "% (C))
Izeja: B ir jādefinē
Tagad mēģiniet vēlreiz, izmantojot definēto "B":
mēģiniet:
B = 5
C = 2 + B
izņemot:
drukāt ("B ir jānosaka")
cits:
print (u "Pievienots veiksmīgi! Rezultāts ir% s "% (C))
Izeja: Veiksmīgi pievienots! Rezultāts ir 7
Iepriekš minētie piemēri ir nestandartizēti izņēmumi. Bet jums var būt skaidrāks izņēmums, apvienojot iebūvētos (definētos) izņēmumus ar nestandartizētajiem:
mēģiniet:
C = 2 + B
izņemot NameError kā kļūdu:
drukāt (err, ":", "B ir jādefinē, lūdzu")
cits:
print (u "Pievienots veiksmīgi! Rezultāts ir% s "% (C))
Izeja: nosaukums 'B' nav definēts: lūdzu, jādefinē B
Iepriekš minētais izņēmums vispirms pārbauda, vai ir a NameError iekš mēģiniet bloķēt. Tad tas izdrukā standartu NameError pirmais izņēmums ("nosaukums" B "nav definēts"). Un atbalsta to ar jūsu rakstisko izņēmumu ("Lūdzu, jādefinē B").
Saistīts: Programmēšanas pamatprincipi, kas jāzina katram programmētājam
Un, ja vēlaties rīkoties ar virkni izņēmumu, varat arī pavadīt a mēģiniet bloķēt ar daudziem izņemot paziņojumi. Tas ir diezgan ērti, ja jūsu mēģiniet blokam ir daudz izņēmumu:
mēģiniet:
B = 5
C = 2 + B
D = pludiņš (6)
F = 7/0
izņemot NameError kā kļūdu:
drukāt (err, ":", "B ir jādefinē, lūdzu")
izņemot ValueError kā val:
print (val, ":", "Jūs nevarat konvertēt šos datus")
izņemot ZeroDivisionError kā zeroerr:
drukāt (zeroerr, ":", "Skaitli nevar dalīt ar nulli")
cits:
print (u "Darbība ir veiksmīga! Rezultāti ir:% s,% s un% s "% (C, D, F))
Izeja: dalīšana ar nulli: skaitli nevar dalīt ar nulli
Ko darīt, ja dalījums ir derīgs? Piemēram, aizstājot F = 7/0 iepriekš minētajā kodā ar F = 7/5 dod:
Izeja: Operācija veiksmīga! Rezultāti ir: 7, 6,0 un 1,4
Lietotāja noteikti izņēmumi Python
Jūs varat arī izdomāt savu izņēmumu un piezvanīt viņiem vēlāk savā programmā. Tas ļauj jums sniegt īpašu izņēmuma aprakstu un nosaukt to, kā vēlaties.
Tomēr katrs lietotāja definēts izņēmums (tieši vai netieši) joprojām nāk no iebūvētā Izņēmums klase Python.
Tālāk sniegtajā koda piemērā ir atsauce uz pamatu Izņēmums tieši zvanot RuntimeError no tā:
klases savienojuma kļūda (RuntimeError):
def __init __ (sevis, vērtība):
self.value = vērtība
mēģiniet:
raise connectionError ("Slikts resursdatora nosaukums")
izņemot connectionError as err:
izdrukāt (err.value)
Izeja: Slikts resursdatora nosaukums
Pieraksti to savienojuma kļūda, šajā gadījumā ir lietotāja noteikta klase, kuru jūs varat paaugstināt jebkurā laikā, kad tas ir nepieciešams jūsu programmā.
Saistīts: Beginner’s Guide to Regular Expressions With Python
Jūs varat izveidot lietotāja definētu izņēmumu, atvasinot to tieši no Izņēmums bāzes klase. Zemāk esošais izņēmums tomēr novērš 5 atņemšanu no 6 un izsauc izņēmumu no pamatklases tieši:
klases kļūdas (izņēmums):
iziet
klase sixFiveError (kļūdas):
def __init __ (pats, vērtība, ziņojums):
self.value = vērtība
self.message = ziņojums
mēģiniet:
paaugstināt sixFiveError (6-5, "Šis apakšsavilkums nav atļauts")
izņemot sixFiveError kā e:
drukāt ("Radās kļūda:", e-ziņojums)
Izeja: Radās kļūda: šī apakšdaļa nav atļauta
Praksē jūs varat izmantot iepriekš definētu izņēmumu, izsaucot to citā funkcijā. Piemēram, jūs varat izveidot floatError kas ļauj pievienot tikai divus pludiņus:
# Vispirms izsauciet bāzes izņēmuma klases:
klases kļūdas (izņēmums):
iziet
# Pēc tam iegūstiet pats savu izņēmumu no pamatklases:
klase FloatError (kļūdas):
def __init __ (pats, vērtība, ziņojums):
self.value = vērtība
self.message = ziņojums
# Izveidojiet funkciju, lai pievienotu divus pludiņus:
def addTwoFloat (a, b):
ja (tips (a) un tips (b))! = pludiņš:
paceliet FloatError (a + b, "Lai skaitļi būtu peldoši, lai pievienotu")
cits:
drukāt (a + b)
addTwoFloat (4, 7)
Izeja: __main __. FloatError: (11, 'Lai numurus pievienotu, skaitļiem jābūt peldošiem')
Tāpēc, ka tagad esat definējis a FloatError klasē, Python to paceļ, ja mēģināt pievienot divus literātus, kas nav peldoši, izmantojot addtwoFloat funkciju.
Jūs varat izdrukāt FloatError klase tajā pašā Python failā, kur to esat izveidojis, lai redzētu, kas notiek:
drukāt (FloatError)
Izeja:
FloatErrortomēr nav iebūvēts Python izņēmums. To var pārbaudīt, zvanot FloatError citā svaigā Python failā, kurā neesat izveidojis šo klasi:
drukāt (FloatError)
Izeja: NameError: nosaukums 'FloatError' nav definēts
Jūs saņemat NameError jo Python to neatzīst kā standarta izņēmumu.
Jūs varat mēģināt pašnoteikt arī citas kļūdu klases, lai redzētu, kā tās spēlē.
Padariet savas Python programmas lietotājam draudzīgākas ar izņēmumiem
Python ir daudz standarta izņēmumu. Bet jūs varat definēt arī savu. Neskatoties uz to, programmas izmantošanas vienkāršība zināmā mērā ir atkarīga no tā, kā tā rīkojas ar dažādiem izņēmumiem (neatkarīgi no tā, vai tos nosaka lietotājs, nespecifiski vai standarta).
Tomēr izņēmumi ļauj jums noteikt, kā jūsu programmai vajadzētu darboties, kad lietotāji ar tām mijiedarbojas. Skaidri un kodolīgi norādot kļūdas cēloni, lietotāji var uzzināt, ko viņi dara nepareizi, un dažreiz tas norāda viņus pareizajā virzienā.
Aprīkojiet sevi ar zinātību, kā saspiest katru Python kļūdu savā ceļā.
Lasiet Tālāk
- Programmēšana
- Python
- Kodēšanas konsultācijas

Idowu aizrauj kaut ko gudru tehnoloģiju un produktivitāti. Brīvajā laikā viņš spēlējas ar kodēšanu un pāriet uz šaha galdiņu, kad viņam ir garlaicīgi, taču viņš mīl arī kādu laiku atrauties no rutīnas. Aizraušanās ar cilvēku parādīšanu mūsdienu tehnoloģijās motivē viņu rakstīt vairāk.
Abonējiet mūsu biļetenu
Pievienojieties mūsu informatīvajam izdevumam par tehniskiem padomiem, atsauksmēm, bezmaksas e-grāmatām un ekskluzīviem piedāvājumiem!
Vēl viens solis !!!
Lūdzu, apstipriniet savu e-pasta adresi e-pastā, kuru tikko nosūtījām.