Kaip tvarkyti išimtis „Python“

Kaip tvarkyti išimtis „Python“

Išimčių tvarkymas - tai jūsų galimybė pritaikyti ir rodyti klaidų pranešimus tam tikroms programos dalims, kurios neveikia.





Nesvarbu, ar kuriate svetainę, kuriate API, modulį ar bet kurį kitą produktą naudodami „Python“, jūsų sugebėjimas efektyviai tvarkyti išimtis leidžia aiškiai nurodyti klaidos priežastį.





Čia apžvelgsime, kaip galite elgtis su „Python“ išimtimis.





Kaip veikia išimčių tvarkymas „Python“

Kai keliate išimtis, jūs sakote „Python“, kad jis parodytų pranešimą, kai kodo blokas nepavyksta. Išimčių tvarkymas yra tarsi liepimas kam nors pabandyti pakelti svorį. Ir jei jie negali, jie turėtų jums pranešti.

Tačiau norėdami padidinti „Python“ išimtį, liepsite „Python“ pabandyti paleisti tam tikrą kodo bloką. Jei šis blokas nepavyksta, galite paprašyti „Python“ iškelti nustatytą išimtį nepavykusiam kodui.



Kada turėtumėte naudoti „Python“ programavimo išimtis?

Daugeliu atvejų galite užmaskuoti standartines „Python“ klaidas naudodami išimtis. Tačiau turite būti budrūs, nes tai gali sukelti derinimo problemų. Todėl jums gali būti sunku išsiaiškinti galimą klaidos priežastį.

Todėl turėtumėte naudoti išimtis, kai pakankamai išbandėte savo kodą ir esate tikri, kad jis veikia. Galų gale geriausia būtų juos naudoti galimoms klaidoms, kurios gali kilti dėl vartotojo, o ne paties kodo, pašalinti.





Kitaip tariant, galite naudoti išimtis kaip įspėjimo priemonę, kad naudotojai gautų nurodymus, kaip naudotis jūsų programa.

Python išimčių tvarkymas

Norėdami tvarkyti išimtis „Python“, pirmiausia turite įvesti kodą į pabandyk ... išskyrus blokuoti. Kartais gali tekti įtraukti a pagaliau pareiškimą, kad galėtumėte atlikti tolesnius veiksmus, priklausomai nuo jūsų poreikių.





„Python“ išimčių kodavimo koncepcija paprastai atrodo taip:

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

Kaip minėta anksčiau, taip pat galite naudoti pagaliau išimčių bloke. Bet kodas, kurį rašote viduje a pagaliau sąlyga yra nepriklausoma ir veikia nepriklausomai nuo to, ar yra išimtis, ar ne.

Iš esmės tai praverčia, jei turite kitą kodo bloką, kurį norite paleisti nuolat, nepaisant to, kas vyksta pabandyk ... išskyrus blokuoti.

Štai pavyzdys:

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

Aukščiau pateiktame kode prašau iš naujo veikia nuolat, nepriklausomai nuo to, ar yra išimtis, ar ne.

An Kitas būklė taip pat gali atsirasti išskyrus teiginys:

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

Dabar pabandykite tai dar kartą apibrėždami „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

Pirmiau pateikti pavyzdžiai yra nestandartinės išimtys. Bet jūs galite turėti aiškesnę išimtį, kai sujungiate integruotas (apibrėžtas) išimtis su nestandartinėmis:

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

Pirmiau nurodyta išimtis pirmiausia patikrina, ar yra NameError viduje konors bandyti blokuoti. Tada jis spausdina standartą NameError pirmiausia išimtis („pavadinimas„ B “nėra apibrėžtas“). Ir palaiko tai su jūsų rašytine išimtimi („B reikia apibrėžti, prašau“).

Susiję: Pagrindiniai programavimo principai, kuriuos turi žinoti kiekvienas programuotojas

„MacBook Pro“ pakanka 256 GB

Ir jei norite tvarkyti išimčių grandinę, taip pat galite lydėti a bandyti blokuoti su daugeliu išskyrus pareiškimus. Tai gana patogu, jei jūsų bandyti blokas gali turėti daug išimčių:

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

Ką daryti, jei padalijimas galioja? Pavyzdžiui, pakeisti F = 7/0 aukščiau esančiame kode su F = 7/5 suteikia:

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

Vartotojo nustatytos išimtys „Python“

Taip pat galite sugalvoti savo išimtį ir paskambinti jiems vėliau savo programoje. Tai leidžia konkrečiai apibūdinti savo išimtį ir pavadinti ją taip, kaip jums patinka.

Nepaisant to, kiekviena vartotojo apibrėžta išimtis (tiesiogiai ar netiesiogiai) vis tiek kyla iš integruotos Išimtis Python klasė.

Žemiau pateiktas pavyzdinis kodas nurodo bazę Išimtis tiesiogiai paskambinus Klaida iš jo:

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

Prisimink tai ryšio klaida , šiuo atveju yra vartotojo apibrėžta klasė, kurią galite pakelti bet kada, kai jums to reikia programoje.

Susijęs: Pradedančiųjų reguliarių išraiškų su „Python“ vadovas

Galite padaryti vartotojo apibrėžtą išimtį, išvesdami ją tiesiogiai iš Išimtis bazinė klasė. Tačiau toliau pateikta išimtis neleidžia atimti 5 iš 6 ir išimtį iš pagrindinės klasės vadina tiesiogiai:

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

Praktiškai galite naudoti anksčiau apibrėžtą išimtį, iškviesdami ją kitoje funkcijoje. Pavyzdžiui, galite sukurti a floatError tai leidžia pridėti tik dvi plūdes:

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

Nes dabar jūs apibrėžėte a „FloatError“ klasę, „Python“ ją iškelia, jei bandote pridėti du ne plūduriuojančius literalus naudodami addtwoFloat funkcija.

Galite atspausdinti „FloatError“ klasę tame pačiame „Python“ faile, kuriame jį sukūrėte, kad pamatytumėte, kas vyksta:

print(FloatError)
Output:

„FloatError“ tačiau nėra įmontuota „Python“ išimtis. Tai galite patikrinti paskambinę „FloatError“ kitame naujame „Python“ faile, kuriame nesukūrėte šios klasės:

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

Jūs gaunate a NameError nes „Python“ to nepripažįsta kaip standartinės išimties.

Taip pat galite pabandyti nustatyti kitas klaidų klases, kad pamatytumėte, kaip jos veikia.

Padarykite savo „Python“ programas patogesnes vartotojui su išimtimis

„Python“ yra daug standartinių išimčių. Bet jūs taip pat galite apibrėžti savo. Nepaisant to, jūsų programos naudojimo paprastumas tam tikru mastu priklauso nuo to, kaip ji elgiasi su įvairiomis išimtimis (nesvarbu, vartotojo apibrėžtomis, nespecifinėmis ar standartinėmis).

Tačiau išimtys leidžia jums nurodyti, kaip turėtų veikti jūsų programa, kai vartotojai su jais sąveikauja. Aiškiai ir glaustai nurodant klaidos priežastį vartotojai taip pat sužino, ką daro blogai, o kartais tai nurodo teisinga linkme.

Dalintis Dalintis „Tweet“ Paštu Kaip derinti „Python“ kodą

Pasirūpinkite žiniomis, kaip sutraiškyti kiekvieną „Python“ klaidą savo kelyje.

Skaityti toliau
Susijusios temos
  • Programavimas
  • Python
  • Kodavimo pamokos
Apie autorių Idisou Omisola(Paskelbti 94 straipsniai)

Idowu aistringai domisi visomis išmaniosiomis technologijomis ir produktyvumu. Laisvalaikiu jis žaidžia koduodamasis ir nuobodžiai persijungia į šachmatų lentą, tačiau taip pat mėgsta retkarčiais atitrūkti nuo rutinos. Jo aistra parodyti žmonėms kelią aplink šiuolaikines technologijas skatina jį daugiau rašyti.

Daugiau iš Idowu Omisola

Prenumeruokite mūsų naujienlaiškį

Prisijunkite prie mūsų naujienlaiškio, kad gautumėte techninių patarimų, apžvalgų, nemokamų el. Knygų ir išskirtinių pasiūlymų!

Norėdami užsiprenumeruoti, spustelėkite čia