Excepciones personalizadas de Python
Excepciones personalizadas de Python
En este tutorial, aprenderá a definir excepciones personalizadas según sus requisitos con la ayuda de ejemplos.
Python tiene numerosas excepciones integradas que obligan a su programa a generar un error cuando algo sale mal.
Sin embargo, a veces es posible que deba crear sus propias excepciones personalizadas que sirvan a su propósito.
Creando excepciones personalizadas
En Python, los usuarios pueden definir excepciones personalizadas creando una nueva clase. Esta clase de excepción debe derivarse, ya sea directa o indirectamente, del Exception
integrado clase. La mayoría de las excepciones integradas también se derivan de esta clase.
>>> class CustomError(Exception):
... pass
...
>>> raise CustomError
Traceback (most recent call last):
...
__main__.CustomError
>>> raise CustomError("An error occurred")
Traceback (most recent call last):
...
__main__.CustomError: An error occurred
Aquí, hemos creado una excepción definida por el usuario llamada CustomError
que hereda del Exception
clase. Esta nueva excepción, como otras excepciones, se puede generar usando el raise
declaración con un mensaje de error opcional.
Cuando estamos desarrollando un programa grande de Python, es una buena práctica colocar todas las excepciones definidas por el usuario que genera nuestro programa en un archivo separado. Muchos módulos estándar hacen esto. Definen sus excepciones por separado como exceptions.py
o errors.py
(generalmente pero no siempre).
La clase de excepción definida por el usuario puede implementar todo lo que puede hacer una clase normal, pero generalmente las hacemos simples y concisas. La mayoría de las implementaciones declaran una clase base personalizada y derivan otras clases de excepción de esta clase base. Este concepto se aclara en el siguiente ejemplo.
Ejemplo:excepción definida por el usuario en Python
En este ejemplo, ilustraremos cómo se pueden usar las excepciones definidas por el usuario en un programa para generar y detectar errores.
Este programa le pedirá al usuario que ingrese un número hasta que adivine correctamente un número almacenado. Para ayudarlos a resolverlo, se proporciona una pista sobre si su suposición es mayor o menor que el número almacenado.
# define Python user-defined exceptions
class Error(Exception):
"""Base class for other exceptions"""
pass
class ValueTooSmallError(Error):
"""Raised when the input value is too small"""
pass
class ValueTooLargeError(Error):
"""Raised when the input value is too large"""
pass
# you need to guess this number
number = 10
# user guesses a number until he/she gets it right
while True:
try:
i_num = int(input("Enter a number: "))
if i_num < number:
raise ValueTooSmallError
elif i_num > number:
raise ValueTooLargeError
break
except ValueTooSmallError:
print("This value is too small, try again!")
print()
except ValueTooLargeError:
print("This value is too large, try again!")
print()
print("Congratulations! You guessed it correctly.")
Aquí hay una muestra de ejecución de este programa.
Enter a number: 12 This value is too large, try again! Enter a number: 0 This value is too small, try again! Enter a number: 8 This value is too small, try again! Enter a number: 10 Congratulations! You guessed it correctly.
Hemos definido una clase base llamada Error
.
Las otras dos excepciones (ValueTooSmallError
y ValueTooLargeError
) que genera nuestro programa se derivan de esta clase. Esta es la forma estándar de definir excepciones definidas por el usuario en la programación de Python, pero no está limitado solo a esta forma.
Personalización de clases de excepción
Podemos personalizar aún más esta clase para aceptar otros argumentos según nuestras necesidades.
Para aprender a personalizar las clases de excepción, debe tener los conocimientos básicos de programación orientada a objetos.
Visite Programación orientada a objetos de Python para comenzar a aprender acerca de la programación orientada a objetos en Python.
Veamos un ejemplo:
class SalaryNotInRangeError(Exception):
"""Exception raised for errors in the input salary.
Attributes:
salary -- input salary which caused the error
message -- explanation of the error
"""
def __init__(self, salary, message="Salary is not in (5000, 15000) range"):
self.salary = salary
self.message = message
super().__init__(self.message)
salary = int(input("Enter salary amount: "))
if not 5000 < salary < 15000:
raise SalaryNotInRangeError(salary)
Salida
Enter salary amount: 2000 Traceback (most recent call last): File "<string>", line 17, in <module> raise SalaryNotInRangeError(salary) __main__.SalaryNotInRangeError: Salary is not in (5000, 15000) range
Aquí, hemos anulado el constructor del Exception
clase para aceptar nuestros propios argumentos personalizados salary
y message
. Luego, el constructor del padre Exception
la clase se llama manualmente con el self.message
argumento usando super()
.
El self.salary
personalizado atributo se define para ser utilizado más tarde.
El __str__
heredado método del Exception
La clase se usa para mostrar el mensaje correspondiente cuando SalaryNotInRangeError
está elevado.
También podemos personalizar el __str__
método en sí anulándolo.
class SalaryNotInRangeError(Exception):
"""Exception raised for errors in the input salary.
Attributes:
salary -- input salary which caused the error
message -- explanation of the error
"""
def __init__(self, salary, message="Salary is not in (5000, 15000) range"):
self.salary = salary
self.message = message
super().__init__(self.message)
def __str__(self):
return f'{self.salary} -> {self.message}'
salary = int(input("Enter salary amount: "))
if not 5000 < salary < 15000:
raise SalaryNotInRangeError(salary)
Salida
Enter salary amount: 2000 Traceback (most recent call last): File "/home/bsoyuj/Desktop/Untitled-1.py", line 20, in <module> raise SalaryNotInRangeError(salary) __main__.SalaryNotInRangeError: 2000 -> Salary is not in (5000, 15000) range
Para obtener más información sobre cómo manejar las excepciones en Python, visite Manejo de excepciones de Python.
python
- Tipos de datos de Python
- Operadores de Python
- Declaración de paso de Python
- Argumentos de la función de Python
- Diccionario de Python
- Errores de Python y excepciones integradas
- Programación orientada a objetos de Python
- Herencia de Python
- Iteradores de Python
- type() y isinstance() en Python con ejemplos
- Python - Manejo de excepciones