Manejo de Excepciones en Python
En la computación y la programación de computadoras, el manejo de excepciones es el proceso de responder a la ocurrencia de excepciones, condiciones anómalas o excepcionales que requieren un procesamiento especial.
Python tiene muchas excepciones incorporadas que se generan cuando un programa encuentra un error, y la mayoría de las bibliotecas externas, como la popular Requests, incluyen sus propias excepciones personalizadas con las que tendremos que lidiar.
Manejo básico de excepciones
No se puede dividir por cero, eso es una verdad matemática, y si intentas hacerlo en Python, el intérprete generará la excepción incorporada ZeroDivisionError:
def divide(dividend , divisor):
print(dividend / divisor)
divide(dividend=10, divisor=5)
2
divide(dividend=10, divisor=0)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ZeroDivisionError: division by zero
Supongamos que no queremos que nuestro programa detenga su ejecución o muestre al usuario una salida que no entenderá. Digamos que queremos imprimir un mensaje útil y claro, entonces necesitamos manejar la excepción con las palabras clave try y except:
# try-except: manejar excepciones con elegancia
def divide(dividend , divisor):
try: # Intenta ejecutar este código
print(dividend / divisor)
except ZeroDivisionError: # Captura el tipo de excepción específico
print('No se puede dividir por 0')
divide(dividend=10, divisor=5)
2
divide(dividend=10, divisor=0)
No se puede dividir por 0
Inicia sesión para responder este quiz y rastrear tu progreso de aprendizaje
try y exceptcatch y handleerror y rescueif y elseManejo de Múltiples excepciones usando un bloque de excepción
También puedes manejar múltiples excepciones en una sola línea como la siguiente sin la necesidad de crear múltiples bloques de excepción.
# Manejar múltiples excepciones en un bloque except
def divide(dividend , divisor):
try:
if (dividend == 10):
var = 'str' + 1 # Esto generará TypeError
else:
print(dividend / divisor)
except (ZeroDivisionError, TypeError) as error: # Capturar múltiples tipos de excepción
print(error) # Imprimir el mensaje de error
divide(dividend=20, divisor=5)
4
divide(dividend=10, divisor=5)
can only concatenate str (not "int") to str
divide(dividend=10, divisor=0)
division by zero
Inicia sesión para responder este quiz y rastrear tu progreso de aprendizaje
except?except separados para cada tipo de excepciónexcept (Exception1, Exception2)Código Finally en el manejo de excepciones
El código dentro de la sección finally siempre se ejecuta, sin importar si se ha generado una excepción o no:
# Bloque finally: siempre se ejecuta independientemente de las excepciones
def divide(dividend , divisor):
try:
print(dividend / divisor)
except ZeroDivisionError:
print('No se puede dividir por 0')
finally: # Siempre se ejecuta, incluso si ocurre una excepción
print('Ejecución finalizada')
divide(dividend=10, divisor=5)
2.0
Ejecución finalizada
divide(dividend=10, divisor=0)
No se puede dividir por 0
Ejecución finalizada
Inicia sesión para responder este quiz y rastrear tu progreso de aprendizaje
finally?Excepciones Personalizadas
Las excepciones personalizadas se inicializan creando una class que hereda de la clase base Exception de Python, y se generan usando la palabra clave raise:
# Excepción personalizada: se crea heredando de la clase Exception
class MyCustomException(Exception):
pass
raise MyCustomException # Generar la excepción personalizada
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
__main__.MyCustomException
Para declarar un mensaje de excepción personalizado, puedes pasarlo como parámetro:
class MyCustomException(Exception):
pass
raise MyCustomException('Un mensaje personalizado para mi excepción personalizada')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
__main__.MyCustomException: Un mensaje personalizado para mi excepción personalizada
Manejar una excepción personalizada es igual que cualquier otra:
try:
raise MyCustomException('Un mensaje personalizado para mi excepción personalizada')
except MyCustomException:
print('Se generó mi excepción personalizada')
Se generó mi excepción personalizada
Inicia sesión para responder este quiz y rastrear tu progreso de aprendizaje
Exception@exceptionException.create()