Obravnava izjem je vaša sposobnost prilagajanja in prikazovanja sporočil o napakah za dele programa, ki ne delujejo.

Ne glede na to, ali gradite spletno mesto, izdelujete API, modul ali kateri koli drug izdelek s pomočjo Pythona, vaša sposobnost učinkovitega ravnanja z izjemami omogoča izrecno navedbo vzroka napake.

Tu si bomo ogledali, kako lahko obvladate izjeme v Pythonu.

Kako ravnanje z izjemami deluje v Pythonu

Ko sprožite izjeme, naročite Pythonu, naj prikaže sporočilo, kadar blok kode odpove. Ravnanje z izjemami je kot, da nekomu rečete, naj poskusi dvigniti utež. In če ne morejo, naj vas o tem obvestijo.

Če želite v Pythonu ustvariti izjemo, mu boste rekli, naj poskusi zagnati določen blok kode. Če ta blokada ne uspe, lahko nato zahtevate, da Python dvigne določeno izjemo za neuspešno kodo.

Kdaj naj uporabljajo izjeme pri programiranju na Python?

V večini primerov lahko z izjemami prikrijete standardne napake Pythona. Vendar morate biti pozorni, saj lahko to povzroči težave z odpravljanjem napak. Posledično boste morda težko ugotovili osnovni vzrok morebitne napake.

Zato uporabite izjeme, ko ste svojo kodo dovolj preizkusili in ste prepričani, da deluje. Na koncu je najboljša praksa, da jih uporabimo za obvladovanje morebitnih napak, ki se lahko pojavijo na koncu uporabnika in ne na sami kodi.

Z drugimi besedami, izjeme lahko uporabite kot opozorilno orodje za usmerjanje uporabnikov pri uporabi programa.

Obravnavanje izjem Python

Če želite obvladati izjeme v Pythonu, morate kodo najprej zaviti v poskusite... razen blok. Občasno boste morda morali vključiti a končno izjavo za nadaljnja dejanja, odvisno od vaših potreb.

Koncept kodiranja izjem Pythona na splošno izgleda takole:

poskusite:
"koda za izvedbo"
razen:
"obvestilo o napaki"

Kot smo že omenili, lahko tudi uporabite končno v bloku izjem. Toda koda, ki jo napišete v končno klavzula je neodvisna in deluje ne glede na to, ali obstaja izjema ali ne.

V bistvu je priročno, če imate še en blok kode, ki ga želite neprekinjeno izvajati, ne glede na to, kaj se zgodi znotraj poskusite... razen blok.

Tu je primer:

poskusite:
tisk (9 + 6)
razen:
print ("sporočilo o napaki")
končno:
natisni ("prosim znova zaženi")
Izhod:
15
prosim znova zaženite

V zgornji kodi je prosim znova zaženite deluje neprekinjeno, ne glede na to, ali obstaja izjema ali ne.

An drugače stanje lahko sledi tudi razen izjava:

poskusite:
C = 2 + B
razen:
print ("B treba določiti")
sicer:
print (u "Uspešno dodano! Rezultat je% s "% (C))
Izhod: Treba je določiti B

Zdaj poskusite znova z definiranim "B":

poskusite:
B = 5
C = 2 + B
razen:
print ("B treba določiti")
sicer:
print (u "Uspešno dodano! Rezultat je% s "% (C))
Izhod: Dodano uspešno! Rezultat je 7

Zgornji primeri so nestandardizirane izjeme. Lahko pa imate bolj izrecno izjemo, če kombinirate vgrajene (definirane) izjeme z nestandardiziranimi izjemami:

poskusite:
C = 2 + B
razen NameError kot napaka:
natisni (napaka, ":", "B je treba določiti, prosim")
sicer:
print (u "Uspešno dodano! Rezultat je% s "% (C))
Izhod: ime "B" ni določeno: prosimo, opredelite B

Zgornja izjema najprej preveri, ali obstaja NameError v poskusite blok. Nato natisne standard NameError najprej izjema ("ime 'B' ni določeno"). In to podpira z vašo pisno izjemo ("B, opredeliti je treba, prosim").

Sorodno: Osnovni principi programiranja, ki jih mora vedeti vsak programer

Če želite obvladati verigo izjem, lahko spremljate tudi poskusite blok z mnogimi razen izjave. To je zelo priročno, če je vaš poskusite blok ima lahko veliko izjem:

poskusite:
B = 5
C = 2 + B
D = plovec (6)
F = 7/0
razen NameError kot napaka:
natisni (napaka, ":", "B je treba določiti, prosim")
razen ValueError kot val:
print (val, ":", "Teh podatkov ni mogoče pretvoriti")
razen ZeroDivisionError kot zeroerr:
print (zeroerr, ":", "Številke ni mogoče deliti z ničlo")
sicer:
print (u "Delovanje uspešno! Rezultati so:% s,% s in% s "% (C, D, F))
Izhod: deljenje z ničlo: Števila ni mogoče deliti z ničlo

Kaj če je delitev veljavna? Na primer, zamenjava F = 7/0 v zgornji kodi z F = 7/5 daje:

Izhod: Operacija uspešna! Rezultati so: 7, 6,0 in 1,4

Uporabniško določene izjeme v Pythonu

Lahko izveste tudi svojo izjemo in jih pokličete pozneje v svojem programu. Tako lahko natančno opišete svojo izjemo in jo poimenujete, kot želite.

Kljub temu vsaka uporabniško določena izjema (neposredno ali posredno) še vedno prihaja iz vgrajene Izjema razred Pythona.

Spodnja koda se sklicuje na bazo Izjema neposredno s klicem RuntimeError od njega:

class connectionError (RuntimeError):
def __init __ (lastnost, vrednost):
self.value = vrednost
poskusite:
dvig povezaveError ("Napačno ime gostitelja")
razen connectionError kot napaka:
tiskanje (napačna vrednost)
Izhod: Napačno ime gostitelja

Upoštevajte to napaka v povezavi, v tem primeru je uporabniško določen razred, ki ga lahko dvignete kadar koli ga potrebujete v svojem programu.

Sorodno: Priročnik za začetnike po regularnih izrazih s Pythonom

Uporabniško določeno izjemo lahko naredite tako, da jo izpeljete neposredno iz Izjema osnovni razred. Spodnja izjema pa preprečuje odštevanje 5 od 6 in neposredno pokliče izjemo iz osnovnega razreda:

napake v razredu (izjema):
podajo
razred sixFiveError (napake):
def __init __ (self, value, message):
self.value = vrednost
self.message = sporočilo
poskusite:
dvigniti sixFiveError (6-5, "Ta odštevanje ni dovoljeno")
razen sixFiveError kot e:
print ("Prišlo je do napake:", npr. sporočilo)
Izhod: Prišlo je do napake: Ta odštevanje ni dovoljeno

V praksi lahko uporabite izjemo, ki ste jo določili prej, tako da jo pokličete v drugi funkciji. Lahko na primer ustvarite datoteko floatError ki omogoča samo dodatek dveh plovcev:

# Najprej pokličite osnovne razrede izjem:
napake v razredu (izjema):
podajo
# Nato izvlecite lastno izjemo iz osnovnega razreda:
razred FloatError (napake):
def __init __ (self, value, message):
self.value = vrednost
self.message = sporočilo
# Ustvarite funkcijo za dodajanje dveh plovcev:
def addTwoFloat (a, b):
if (type (a) in type (b))! = float:
dvigni FloatError (a + b, "Številke morajo biti float za dodajanje")
sicer:
tisk (a + b)
addTwoFloat (4, 7)
Izhod: __main __. FloatError: (11, 'Številke morajo biti plavajoče za dodajanje')

Ker ste zdaj definirali a FloatError razred, jo Python zviša, če poskušate dodati dva neplavajoča literala z uporabo addtwoFloat funkcijo.

Lahko natisnete FloatError razred v isti datoteki Python, kjer ste jo ustvarili, da vidite, kaj se zgodi:

tiskanje (FloatError)
Izhod:

FloatErrorvendar ni vgrajena izjema Pythona. To lahko preverite s klicem FloatError v drugi sveži datoteki Python, kjer tega razreda niste ustvarili:

tiskanje (FloatError)
Izhod: NameError: ime 'FloatError' ni določeno

Dobiš NameError ker ga Python ne prepozna kot standardno izjemo.

Poskusite lahko tudi sami določiti druge razrede napak, da vidite, kako se igrajo.

Naredite svoje programe Python uporabnikom prijaznejše z izjemami

V Pythonu je veliko standardnih izjem. Lahko pa določite tudi svojega. Kljub temu je enostavnost uporabe programa do neke mere odvisna od tega, kako obravnava različne izjeme (bodisi uporabniško določene, nespecifične ali standardne).

Izjeme pa vam omogočajo, da narekujete, kako naj program deluje, ko uporabniki komunicirajo z njimi. Jasna in jedrnata navedba vzroka napake uporabnikom daje tudi informacije o tem, kaj delajo narobe, včasih pa jih usmerja v pravo smer.

E-naslov
Kako odpraviti napake s kodo Python

Opremite se z znanjem, kako zmečkati vsako napako Pythona na svoji poti.

Preberite Naprej

Sorodne teme
  • Programiranje
  • Python
  • Vadnice za kodiranje
O avtorju
Idowu Omisola (82 objavljenih člankov)

Idowu je navdušen nad vsemi pametnimi tehnologijami in produktivnostjo. V prostem času se poigrava s kodiranjem in preklopi na šahovnico, ko mu je dolgčas, rad pa se občasno tudi loči od rutine. Njegova strast do tega, da ljudem pokaže pot okoli sodobne tehnologije, ga spodbuja, da piše več.

Več od Idowu Omisola

Naročite se na naše novice

Pridružite se našemu glasilu za tehnične nasvete, preglede, brezplačne e-knjige in ekskluzivne ponudbe!

Še en korak…!

Potrdite svoj e-poštni naslov v e-poštnem sporočilu, ki smo vam ga pravkar poslali.

.