Kako ravnati z izjemami v Pythonu

Kako ravnati z izjemami v Pythonu

Ravnanje z izjemami je vaša sposobnost prilagajanja in prikaza 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 z uporabo Pythona, vam zmožnost učinkovitega obravnavanja izjem omogoča, da izrecno navedete vzrok napake.





Tukaj bomo pogledali, kako lahko ravnate z izjemami v Pythonu.





Kako ravnanje z izjemami deluje v Pythonu

Ko ustvarite izjeme, Pythonu govorite, naj prikaže sporočilo, kadar blok kode ne uspe. Ravnanje z izjemami je kot reči nekomu, naj poskuša dvigniti utež. In če ne morejo, naj vam to sporočijo.

Če želite v Pythonu ustvariti izjemo, boste Pythonu povedali, naj poskusi zagnati določen blok kode. Če ta blok ne uspe, lahko od Pythona zahtevate, da za neuspešno kodo dvigne definirano izjemo.



Kdaj morate uporabiti izjeme pri programiranju Python?

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

Zato morate uporabiti izjeme, ko ste dovolj preizkusili kodo in ste prepričani, da deluje. Navsezadnje je najboljša praksa, da jih uporabite za obravnavo morebitnih napak, ki bi lahko nastale zaradi uporabnikovega konca in ne same kode.





Z drugimi besedami, lahko uporabite izjeme kot orodje za opozarjanje, ki uporabnike vodi pri uporabi vašega programa.

Ravnanje z izjemami Python

Če želite obravnavati izjeme v Pythonu, morate kodo najprej zaviti v poskusi ... razen blok. Občasno boste morda morali vključiti tudi končno izjavo o nadaljnjih ukrepih, odvisno od vaših potreb.





Koncept kodiranja izjem Python na splošno izgleda tako:

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

Kot smo že omenili, lahko uporabite tudi končno v bloku izjem. Koda, ki jo napišete v a končno člen je neodvisen in se izvaja ne glede na to, ali obstaja izjema ali ne.

V bistvu pride prav, če imate še en blok kode, ki ga želite izvajati neprekinjeno, ne glede na to, kaj se zgodi v poskusi ... razen blok.

Tukaj je primer:

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

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:

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

Zdaj poskusite znova z definiranim '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

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

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

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

Povezano: Osnovna načela programiranja, ki jih mora poznati vsak programer

kaj je omejena serija Netflix

Če želite obravnavati verigo izjem, lahko spremljate tudi poskusite blokirati z mnogimi razen izjave. To je zelo priročno, če imate poskusite blok ima lahko številne izjeme:

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

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

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

Uporabniške izjeme v Pythonu

Izberete lahko tudi svojo izjemo in jih pokličete pozneje v svojem programu. Tako lahko podate poseben opis svoje izjeme in jo poimenujete, kot želite.

Kljub temu vsaka uporabniško določena izjema (posredno ali neposredno) še vedno izvira iz vgrajenega Izjema razred Python.

Spodnja koda se sklicuje na bazo Izjema neposredno s klicem RuntimeError iz nje:

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

Upoštevajte, da napaka v povezavi , je v tem primeru uporabniško definiran razred, ki ga lahko dvignete, kadar koli ga potrebujete v svojem programu.

Povezano: Vodnik za začetnike po regularnih izrazih s Pythonom

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

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

V praksi lahko uporabite izjemo, ki ste jo opredelili prej, tako da jo pokličete v drugi funkciji. Na primer, lahko ustvarite datoteko floatError ki omogoča samo dodajanje dveh plovcev:

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

Ker ste zdaj opredelili a Napaka FloatError class, ga Python dvigne, če poskušate dodati dve neplavajoči literali z uporabo addtwoFloat funkcijo.

Natisnete lahko Napaka FloatError razred v isti datoteki Python, kjer ste jo ustvarili, da vidite, kaj se zgodi:

print(FloatError)
Output:

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

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

Dobiš a Napaka imena ker ga Python ne prepozna kot standardno izjemo.

Poskusite lahko tudi samoopredeliti druge razrede napak, da vidite, kako se igrajo.

Naj bodo vaši programi Python uporabnikom prijaznejši 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 določite, kako naj bi vaš program deloval, ko uporabniki komunicirajo z njimi. Jasna in jedrnata navedba vzroka napake uporabnikom tudi pove glavo o tem, kaj delajo narobe, včasih pa jih usmeri v pravo smer.

Deliti Deliti Cvrkutati E-naslov Kako odpraviti napake v kodi Python

Opremite se z znanjem in izkušnjami, da bi zatrli vsako napako Python na svoji poti.

Preberite Naprej
Sorodne teme
  • Programiranje
  • Python
  • Vadnice za kodiranje
O avtorju Idisou Omisola(94 objavljenih člankov)

Idowu je navdušen nad vsemi pametnimi tehnologijami in produktivnostjo. V prostem času se igra s kodiranjem in se, ko mu je dolgčas, preklopi na šahovsko tablo, rad pa se občasno tudi odmika od rutine. Njegova strast, da ljudem pokaže pot okoli sodobne tehnologije, ga motivira, 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, ocene, brezplačne e -knjige in ekskluzivne ponudbe!

Kliknite tukaj, če se želite naročiti