Cum să gestionați excepțiile în Python

Cum să gestionați excepțiile în Python

Tratarea excepțiilor este capacitatea dvs. de a personaliza și afișa mesaje de eroare pentru părțile din program care nu funcționează.





Indiferent dacă creați un site web, creați un API, un modul sau orice alt produs care utilizează Python, capacitatea dvs. de a gestiona în mod eficient excepțiile vă permite să precizați în mod explicit cauza unei erori.





Aici, vom arunca o privire la modul în care puteți gestiona excepțiile din Python.





Cum funcționează gestionarea excepțiilor în Python

Când ridicați excepții, îi spuneți Python să afișeze un mesaj ori de câte ori un bloc de cod eșuează. Manipularea excepțiilor este ca și cum ai spune cuiva să încerce să ridice o greutate. Și dacă nu pot, ar trebui să vă anunțe.

Cu toate acestea, pentru a ridica o excepție în Python, veți spune Python să încerce să ruleze un anumit bloc de cod. Dacă blocul respectiv eșuează, puteți cere Python să creeze o excepție definită la codul eșuat.



Când ar trebui să utilizați excepții în programarea Python?

De cele mai multe ori, puteți masca erorile standard Python folosind excepții. Dar trebuie să rămâneți vigilenți, deoarece acest lucru poate cauza probleme de depanare. În consecință, s-ar putea să vă fie greu să aflați cauza principală a unei eventuale erori.

Prin urmare, ar trebui să utilizați excepții atunci când ați testat suficient codul și sunteți sigur că funcționează. În cele din urmă, este cea mai bună practică să le folosiți pentru a gestiona eventualele defecte care pot apărea din finalul utilizatorului, mai degrabă decât din codul în sine.





Cu alte cuvinte, puteți utiliza excepțiile ca instrument de avertizare pentru a ghida utilizatorii cu privire la modul de utilizare a programului dvs.

Gestionarea excepțiilor Python

Pentru a gestiona excepțiile din Python, mai întâi trebuie să vă înfășurați codul într-un fișier încearcă ... cu excepția bloc. Ocazional, poate fi necesar să includeți un in cele din urma declarație pentru a gestiona acțiuni ulterioare, în funcție de nevoile dvs.





Conceptul de codificare a excepțiilor Python arată în general astfel:

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

După cum sa menționat anterior, puteți utiliza și in cele din urma într-un bloc de excepție. Dar codul pe care îl scrieți într-un in cele din urma clauza este independentă și rulează indiferent dacă există sau nu o excepție.

În esență, este util dacă aveți un alt bloc de cod pe care doriți să îl rulați continuu, indiferent de ceea ce se întâmplă în încearcă ... cu excepția bloc.

Iată un exemplu:

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

În codul de mai sus, te rog reporni rulează continuu, indiferent dacă există sau nu o excepție.

Un altceva condiția poate urma și o cu exceptia afirmație:

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

Acum încercați din nou cu „B” definit:

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

Exemplele de mai sus sunt excepții ne standardizate. Dar puteți avea o excepție mai explicită atunci când combinați excepții încorporate (definite) cu excepții nestandardizate:

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

Excepția de mai sus verifică mai întâi dacă există un NameError în încerca bloc. Apoi imprimă standardul NameError excepție mai întâi („numele„ B ”nu este definit”). Și îl acceptă cu excepția dvs. scrisă („B trebuie definit, vă rog”).

Conectat: Principii de programare de bază pe care trebuie să le cunoască fiecare programator

cum să descărcați melodii de pe Google Play

Și dacă doriți să gestionați un lanț de excepții, puteți însoți și un încerca bloc cu mulți cu exceptia declarații. Este destul de la îndemână dacă încerca blocul are potențialul de a avea multe excepții:

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

Ce se întâmplă dacă diviziunea este valabilă? De exemplu, înlocuirea F = 7/0 în codul de mai sus cu F = 7/5 dă:

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

Excepții definite de utilizator în Python

Puteți veni și cu excepția dvs. și le puteți apela mai târziu în program. Aceasta vă permite să dați o descriere specifică a excepției dvs. și să o denumiți după cum doriți.

Cu toate acestea, fiecare excepție definită de utilizator (direct sau indirect) provine încă de la încorporat Excepție clasa Python.

Exemplul de cod de mai jos face trimitere la bază Excepție direct apelând Eroare de rulare din aceasta:

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

Rețineți că eroare de conexiune , în acest caz, este o clasă definită de utilizator, pe care o poți ridica oricând ai nevoie de ea în programul tău.

Legate de: Ghidul pentru începători pentru expresii regulate cu Python

Puteți face o excepție definită de utilizator derivând-o direct din Excepție clasa de bază. Cu toate acestea, excepția de mai jos împiedică scăderea lui 5 din 6 și apelează direct excepția din clasa de bază:

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

În practică, puteți utiliza o excepție definită mai devreme apelând-o într-o altă funcție. De exemplu, puteți crea un fișier floatError care permite doar adăugarea a două flotante:

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

Pentru că acum ați definit un FloatError class, Python îl ridică dacă încercați să adăugați doi literali non-float folosind addtwoFloat funcţie.

Puteți imprima fișierul FloatError clasă în același fișier Python în care l-ați creat pentru a vedea ce se întâmplă:

print(FloatError)
Output:

FloatError totuși, nu este o excepție Python încorporată. Puteți verifica acest lucru apelând FloatError într-un alt fișier Python proaspăt în care nu ați creat această clasă:

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

Ai un NameError deoarece Python nu o recunoaște ca o excepție standard.

Puteți încerca să definiți și alte clase de erori pentru a vedea cum se joacă.

Faceți programele Python mai ușor de utilizat cu excepții

Există multe excepții standard în Python. Dar o poți defini și pe a ta. Cu toate acestea, ușurința utilizării programului dvs. depinde într-o oarecare măsură de modul în care gestionează diferite excepții (indiferent dacă sunt definite de utilizator, nespecifice sau standard).

Cu toate acestea, excepțiile vă permit să dictați cum ar trebui să funcționeze programul dvs. atunci când utilizatorii interacționează cu aceștia. Afirmarea clară și concisă a cauzei unei erori oferă utilizatorilor o atenție la ceea ce fac greșit și, uneori, îi îndreaptă în direcția corectă.

Acțiune Acțiune Tweet E-mail Cum să depanați codul Python

Echipați-vă cu cunoștințele necesare pentru a distruge fiecare bug Python din calea dvs.

Citiți în continuare
Subiecte asemănătoare
  • Programare
  • Piton
  • Tutoriale de codare
Despre autor Idisou Omisola(94 articole publicate)

Idowu este pasionat de orice tehnologie inteligentă și productivitate. În timpul liber, se joacă cu codificarea și trece la tabla de șah când se plictisește, dar îi place, de asemenea, să se rupă de rutină din când în când. Pasiunea sa pentru a arăta oamenilor calea în jurul tehnologiei moderne îl motivează să scrie mai multe.

Mai multe de la Idowu Omisola

Aboneaza-te la newsletter-ul nostru

Alăturați-vă newsletter-ului pentru sfaturi tehnice, recenzii, cărți electronice gratuite și oferte exclusive!

Faceți clic aici pentru a vă abona