Kā rīkoties ar izņēmumiem Python

Kā rīkoties ar izņēmumiem Python

Izņēmumu apstrāde ir jūsu spēja pielāgot un parādīt kļūdu 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, jūsu spēja efektīvi rīkoties ar izņēmumiem ļ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ā darbojas izņēmumu apstrāde Python

Paaugstinot izņēmumus, jūs sakāt, ka Python uzrāda ziņojumu ikreiz, kad koda bloks neizdodas. Izņēmuma kārtošana ir tāda pati kā pateikt kādam pamēģināt pacelt svaru. Un, ja viņi to nevar, viņiem par to jāpaziņo.

Tomēr, lai Python izceltu izņēmumu, jūs teiksiet Python, lai mēģinātu palaist noteiktu koda bloku. Ja šis bloks neizdodas, varat lūgt Python izvirzīt noteiktu izņēmumu neveiksmīgajam kodam.



Kad Python programmēšanā jāizmanto izņēmumi?

Vairumā gadījumu, izmantojot izņēmumus, varat maskēt standarta Python kļūdas. Bet jums ir jābūt modram, 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 savu kodu un esat pārliecināts, ka tas darbojas, jums jāizmanto izņēmumi. Visbeidzot, tā ir labākā prakse, lai tos izmantotu, lai novērstu iespējamās kļūdas, kas var rasties no lietotāja gala, nevis 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.

Python izņēmumu apstrāde

Lai risinātu izņēmumus programmā Python, vispirms jāiesaiņo kods a pamēģini ... izņemot bloķēt. Reizēm jums, iespējams, būs jāiekļauj a beidzot paziņojumu, lai atkarībā no jūsu vajadzībām veiktu turpmākās darbības.





Python izņēmumu kodēšanas koncepcija parasti izskatās šādi:

try:
'code to be executed'
except:
'error message'

Kā minēts iepriekš, varat arī izmantot beidzot izņēmuma blokā. Bet kods, ko rakstā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 pamēģini ... izņemot bloķēt.

Šeit ir piemērs:

try:
print(9+6)
except:
print('error message')
finally:
print('please restart')
Output:
15
please restart

Iepriekš minētajā kodā lūdzu restartējiet darbojas nepārtraukti, neatkarīgi no tā, vai ir izņēmums vai nē.

An citādi stāvoklis var sekot arī izņemot paziņojums, apgalvojums:

try:
C = 2 + B
except:
print('B needs to be defined')
else:
print(u'Added successfully! The result is %s'%(C))
Output: B needs to be defined

Tagad mēģiniet vēlreiz, definējot “B”:

try:
B = 5
C = 2 + B
except:
print('B needs to be defined')
else:
print(u'Added successfully! The result is %s'%(C))
Output: Added successfully! The result is 7

Iepriekš minētie piemēri ir nestandarta izņēmumi. Bet jums var būt skaidrāks izņēmums, ja apvienojat iebūvētos (definētos) izņēmumus ar nestandarta:

try:
C = 2 + B
except NameError as err:
print(err, ':', 'B needs to be defined, please')
else:
print(u'Added successfully! The result is %s'%(C))
Output: name 'B' is not defined : B needs to be defined, please

Iepriekš minētais izņēmums vispirms pārbauda, ​​vai ir a NameError iekš pamēģini bloķēt. Pēc tam tas izdrukā standartu NameError vispirms izņēmums ('nosaukums' B 'nav definēts'). Un atbalsta to ar jūsu rakstisku izņēmumu ('B ir jādefinē, lūdzu').

Saistītie: Programmēšanas pamatprincipi, kas jāzina katram programmētājam

labākā pele un tastatūra ps4

Un, ja vēlaties rīkoties ar izņēmumu ķēdi, varat arī pavadīt a pamēģini bloķēt ar daudziem izņemot paziņojumi. Tas ir diezgan ērti, ja jūsu pamēģini blokam ir daudz izņēmumu:

try:
B = 5
C = 2 + B
D = float(6)
F = 7/0
except NameError as err:
print(err,':', 'B needs to be defined, please')
except ValueError as val:
print(val,':', 'You can't convert that data')
except ZeroDivisionError as zeroerr:
print(zeroerr,':', 'You can't divide a number by zero')
else:
print(u'Operation successfull! The results are: %s, %s, and %s'%(C, D, F))
Output: division by zero : You can't divide a number by zero

Ko darīt, ja sadalījums ir derīgs? Piemēram, aizstājot F = 7/0 iepriekš minētajā kodā ar F = 7/5 dod:

Output: Operation successfull! The results are: 7, 6.0, and 1.4

Lietotāja definēti izņēmumi programmā Python

Jūs varat arī izdomāt savu izņēmumu un piezvanīt viņiem vēlāk savā programmā. Tas ļauj jums sniegt konkrētu 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 Python klase.

Tālāk redzamais koda piemērs atsaucas uz bāzi Izņēmums tieši zvanot RuntimeError no tā:

class connectionError(RuntimeError):
def __init__(self, value):
self.value = value
try:
raise connectionError('Bad hostname')
except connectionError as err:
print(err.value)
Output: Bad hostname

Pieraksti to savienojuma kļūda , šajā gadījumā tā ir lietotāja definēta klase, kuru varat paaugstināt jebkurā laikā, kad tas ir nepieciešams jūsu programmā.

Saistīts: Iesācēju ceļvedis regulārām izteiksmēm, izmantojot Python

Jūs varat izdarīt lietotāja definētu izņēmumu, atvasinot to tieši no Izņēmums bāzes klase. Tomēr tālāk minētais izņēmums neļauj atņemt 5 no 6 un izsauc izņēmumu tieši no pamatklases:

class errors(Exception):
pass
class sixFiveError(errors):
def __init__(self, value, message):
self.value = value
self.message = message
try:
raise sixFiveError(6-5,'This substraction is not allowed')
except sixFiveError as e:
print('There was an error:', e.message)
Output: There was an error: This substraction is not allowed

Praksē varat izmantot iepriekš definētu izņēmumu, izsaucot to citā funkcijā. Piemēram, varat izveidot a floatError kas ļauj pievienot tikai divus pludiņus:

# First call the base exception classes:
class errors(Exception):
pass
# Next, derive your own exception from the base class:
class FloatError(errors):
def __init__(self, value, message):
self.value = value
self.message = message
# Create a function to add two floats:
def addTwoFloat(a, b):
if (type(a) and type(b)) != float:
raise FloatError(a+b,'Numbers must be float to add')
else:
print(a + b)
addTwoFloat(4, 7)
Output: __main__.FloatError: (11, 'Numbers must be float to add')

Tā kā jūs tagad esat definējis a FloatError klasē, Python to paaugstina, ja mēģināt pievienot divus literārus, kas nav peldoši, izmantojot addtwoFloat funkciju.

Jūs varat izdrukāt FloatError klasi tajā pašā Python failā, kurā to izveidojāt, lai redzētu, kas notiek:

print(FloatError)
Output:

FloatError tomēr nav iebūvēts Python izņēmums. To var pārbaudīt, zvanot FloatError citā svaigā Python failā, kurā neesat izveidojis šo klasi:

print(FloatError)
Output: NameError: name 'FloatError' is not defined

Jūs saņemat a NameError jo Python to neatzīst par standarta izņēmumu.

Varat arī mēģināt definēt citas kļūdu klases, lai redzētu, kā tās darbojas.

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. Tomēr programmas izmantošanas vieglums zināmā mērā ir atkarīgs no tā, kā tā izturas pret dažādiem izņēmumiem (neatkarīgi no lietotāja definētiem, nespecifiskiem vai standarta).

Tomēr izņēmumi ļauj jums noteikt, kā jūsu programmai vajadzētu darboties, kad lietotāji ar viņiem mijiedarbojas. Skaidri un kodolīgi norādot kļūdas cēloni, lietotāji var arī uzzināt, ko viņi dara nepareizi, un dažreiz tas norāda viņus pareizajā virzienā.

Kopīgot Kopīgot Čivināt E -pasts Kā atkļūdot savu Python kodu

Aprīkojiet sevi ar zināšanām, lai izspiestu katru Python kļūdu savā ceļā.

Lasīt Tālāk
Saistītās tēmas
  • Programmēšana
  • Python
  • Kodēšanas apmācības
Par autoru Idisou Omisola(Publicēti 94 raksti)

Idowu aizraujas ar jebko gudru tehnoloģiju un produktivitāti. Brīvajā laikā viņš spēlējas ar kodēšanu un pārslēdzas uz šaha galdu, kad viņam ir garlaicīgi, taču viņam arī patīk laiku pa laikam atrauties no rutīnas. Viņa aizraušanās parādīt cilvēkiem ceļu apkārt mūsdienu tehnoloģijām motivē viņu rakstīt vairāk.

Vairāk no Idowu Omisola

Abonējiet mūsu biļetenu

Pievienojieties mūsu informatīvajam izdevumam, lai iegūtu tehniskus padomus, pārskatus, bezmaksas e -grāmatas un ekskluzīvus piedāvājumus!

Noklikšķiniet šeit, lai abonētu