Com gestionar les excepcions a Python

Com gestionar les excepcions a Python

El tractament d’excepcions és la possibilitat de personalitzar i mostrar missatges d’error per a parts del programa que no funcionen.





Ja sigui que creeu un lloc web, que creeu una API, un mòdul o qualsevol altre producte que utilitzi Python, la vostra capacitat per gestionar efectivament les excepcions us permetrà expressar explícitament la causa d’un error.





Aquí farem un cop d'ull a com podeu gestionar les excepcions a Python.





Com funciona la gestió d'excepcions a Python

Quan susciteu excepcions, esteu dient a Python que mostri un missatge sempre que falla un bloc de codi. El maneig d’excepcions és com dir a algú que intenti aixecar pes. I si no poden, us ho haurien de fer saber.

Tanmateix, per generar una excepció a Python, heu de dir a Python que provi d'executar un bloc de codi concret. Si aquest bloc falla, podeu demanar a Python que augmenti una excepció definida al codi fallit.



Quan heu d’utilitzar excepcions a la programació de Python?

En la majoria de les ocasions, podeu emmascarar els errors estàndard de Python mitjançant excepcions. Però heu d’estar atent, ja que fer-ho pot causar problemes de depuració. En conseqüència, és possible que tingueu dificultats per esbrinar la causa arrel d’un eventual error.

Per tant, heu d’utilitzar excepcions quan hàgiu provat prou el vostre codi i esteu segur que funciona. En última instància, és recomanable utilitzar-los per gestionar possibles errors que puguin derivar-se del final de l'usuari en lloc del codi en si.





Dit d’una altra manera, podeu utilitzar excepcions com a eina d’advertència per guiar els usuaris sobre com utilitzar el vostre programa.

Gestió d'excepcions de Python

Per gestionar excepcions a Python, primer heu d'ajustar el vostre codi a un fitxer prova ... excepte bloc. De tant en tant, és possible que hàgiu d'incloure un fitxer finalment declaració per gestionar altres accions, en funció de les vostres necessitats.





El concepte de codificació de les excepcions de Python sol ser així:

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

Com es va esmentar anteriorment, també podeu utilitzar-lo finalment en un bloc d'excepció. Però el codi que escriviu dins d'un fitxer finalment clàusula és independent i s’executa tant si hi ha una excepció com si no.

En essència, és útil si teniu un altre bloc de codi que vulgueu executar contínuament, independentment del que passi dins del fitxer prova ... excepte bloc.

Aquí teniu un exemple:

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

Al codi anterior, reinicieu s'executa contínuament, independentment de si hi ha una excepció o no.

An en cas contrari condició també pot seguir un excepte declaració:

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

Ara torneu-ho a provar amb '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

Els exemples anteriors són excepcions no normalitzades. Però podeu tenir una excepció més explícita quan combineu excepcions integrades (definides) amb excepcions no normalitzades:

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

L'excepció anterior comprova primer si n'hi ha NameError al provar bloc. A continuació, imprimeix l'estàndard NameError excepció primer ('nom' B 'no està definit'). I ho admet amb la vostra excepció escrita (cal definir B, si us plau).

Relacionat: Principis bàsics de programació que tot programador ha de conèixer

el meu disc funciona a 100

I si voleu gestionar una cadena d’excepcions, també podeu acompanyar a provar bloquejar amb molts excepte declaracions. Això és força útil si provar block pot tenir moltes excepcions:

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

Què passa si la divisió és vàlida? Per exemple, substituint F = 7/0 al codi anterior amb F = 7/5 dóna:

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

Excepcions definides per l'usuari a Python

També podeu presentar la vostra excepció i trucar-les més endavant al programa. Això us permet donar una descripció específica de la vostra excepció i anomenar-la com vulgueu.

Tot i això, totes les excepcions definides per l'usuari (directa o indirectament) encara provenen de la funció integrada Excepció classe de Python.

El codi d'exemple següent fa referència a la base Excepció directament trucant Error d'execució a partir d'ella:

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

Tingues en compte que error de connexió , en aquest cas, és una classe definida per l'usuari, que podeu generar sempre que ho necessiteu al vostre programa.

Relacionat: La Guia per a principiants d’expressions regulars amb Python

Podeu fer una excepció definida per l'usuari derivant-la directament del fitxer Excepció classe base. No obstant això, l'excepció següent impedeix restar 5 de 6 i crida directament l'excepció de la classe base:

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

A la pràctica, podeu utilitzar una excepció definida anteriorment trucant-la a una altra funció. Per exemple, podeu crear un fitxer floatError que només permet afegir dos flotadors:

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

Perquè ara heu definit un fitxer FloatError class, Python el planteja si intenteu afegir dos literals no flotants mitjançant el fitxer addtwoFloat funció.

Podeu imprimir el fitxer FloatError classe al mateix fitxer Python on l’heu creat per veure què passa:

print(FloatError)
Output:

FloatError , però, no és una excepció integrada a Python. Podeu verificar-ho trucant FloatError en un altre fitxer Python nou on no heu creat aquesta classe:

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

Obtens un NameError perquè Python no ho reconeix com una excepció estàndard.

També podeu provar d’autodefinir altres classes d’errors per veure com es desenvolupen.

Feu que els vostres programes Python siguin més fàcils d’utilitzar amb excepcions

Hi ha moltes excepcions estàndard a Python. Però també podeu definir la vostra. Tot i això, la facilitat d'ús del programa depèn fins a cert punt de la manera com gestiona diverses excepcions (ja siguin definides per l'usuari, no específiques o estàndard).

Tanmateix, les excepcions us permeten dictar com ha de funcionar el vostre programa quan els usuaris hi interactuen. En declarar amb claredat i concisió la causa d’un error, els usuaris també poden saber què fan malament i, de vegades, els indica en la direcció correcta.

Compartir Compartir Tweet Correu electrònic Com depurar el vostre codi Python

Prepareu-vos el coneixement per aixafar tots els errors de Python al vostre pas.

Llegiu a continuació
Temes relacionats
  • Programació
  • Python
  • Tutorials de codificació
Sobre l'autor Idisou Omisola(94 articles publicats)

Idowu és un apassionat de qualsevol tecnologia intel·ligent i productivitat. Durant el temps lliure, juga amb la codificació i canvia al tauler d’escacs quan s’avorreix, però també li agrada deixar de banda la rutina de tant en tant. La seva passió per mostrar a la gent el camí cap a la tecnologia moderna el motiva a escriure més.

Més de Idowu Omisola

Subscriu-te al nostre butlletí

Uniu-vos al nostre butlletí per obtenir consells tècnics, ressenyes, llibres electrònics gratuïts i ofertes exclusives.

Feu clic aquí per subscriure-us