Generar Excepciones Personalizadas
A veces necesita señalar una condición de error que no es una excepción incorporada de Python. Puede hacerlo con la sentencia raise, que le permite crear y activar sus propias excepciones. Esto es útil para hacer que el manejo de errores de su aplicación sea más específico y descriptivo.
Primero, veamos cómo usar raise con una excepción incorporada. En el WebIDE, abra el archivo ~/project/raise_exception.py y agregue el siguiente código:
def check_positive(number):
if number <= 0:
raise ValueError("Input must be a positive number")
print(f"The number {number} is positive.")
try:
check_positive(-5)
except ValueError as e:
print(f"Caught an exception: {e}")
try:
check_positive(10)
except ValueError as e:
print(f"Caught an exception: {e}")
Guarde el archivo y ejecútelo desde la terminal:
python ~/project/raise_exception.py
La salida será:
Caught an exception: Input must be a positive number
The number 10 is positive.
Aquí, la función check_positive genera una ValueError si la entrada no es positiva, la cual es capturada por el bloque except.
Ahora, definamos y generemos una excepción personalizada. Las excepciones personalizadas son clases que heredan de la clase incorporada Exception.
En el WebIDE, abra el archivo ~/project/custom_exception.py y agregue el siguiente código:
class NegativeNumberError(Exception):
"""Custom exception raised for negative numbers."""
pass
def process_positive_number(number):
if number < 0:
raise NegativeNumberError("Negative numbers are not allowed")
print(f"Processing positive number: {number}")
try:
process_positive_number(-10)
except NegativeNumberError as e:
print(f"Caught custom exception: {e}")
try:
process_positive_number(20)
except NegativeNumberError as e:
print(f"Caught custom exception: {e}")
Guarde el archivo y ejecútelo desde la terminal:
python ~/project/custom_exception.py
La salida será:
Caught custom exception: Negative numbers are not allowed
Processing positive number: 20
En este ejemplo, definimos nuestra propia NegativeNumberError y la generamos bajo una condición específica. Luego, el bloque try...except captura específicamente este tipo de error personalizado, haciendo el manejo de errores más preciso.