En Python, las excepciones son una forma de manejar errores y situaciones excepcionales que pueden ocurrir durante la ejecución de un programa. Aunque Python proporciona muchas excepciones integradas, a veces es útil definir nuestras propias excepciones personalizadas para manejar situaciones específicas de nuestra aplicación.

¿Por Qué Usar Excepciones Personalizadas?

Las excepciones personalizadas nos permiten:

  • Claridad: Hacer que el código sea más legible y comprensible.
  • Especificidad: Manejar errores específicos de nuestra aplicación que no están cubiertos por las excepciones integradas.
  • Mantenimiento: Facilitar el mantenimiento del código al proporcionar mensajes de error más significativos.

Definiendo una Excepción Personalizada

Para definir una excepción personalizada en Python, creamos una nueva clase que hereda de la clase base Exception. Aquí hay un ejemplo básico:

class MiExcepcionPersonalizada(Exception):
    """Clase base para otras excepciones personalizadas"""
    pass

class ValorDemasiadoAltoError(MiExcepcionPersonalizada):
    """Excepción lanzada cuando el valor es demasiado alto"""
    pass

class ValorDemasiadoBajoError(MiExcepcionPersonalizada):
    """Excepción lanzada cuando el valor es demasiado bajo"""
    pass

Ejemplo Práctico

Vamos a crear un ejemplo donde utilizamos estas excepciones personalizadas. Supongamos que tenemos una función que verifica si un número está dentro de un rango permitido:

def verificar_valor(valor):
    if valor > 100:
        raise ValorDemasiadoAltoError("El valor es demasiado alto!")
    elif valor < 1:
        raise ValorDemasiadoBajoError("El valor es demasiado bajo!")
    else:
        print("El valor está dentro del rango permitido.")

# Probando la función
try:
    verificar_valor(150)
except ValorDemasiadoAltoError as e:
    print(e)
except ValorDemasiadoBajoError as e:
    print(e)

Explicación del Código

  1. Definición de Excepciones:

    • MiExcepcionPersonalizada: Clase base para nuestras excepciones personalizadas.
    • ValorDemasiadoAltoError y ValorDemasiadoBajoError: Excepciones específicas que heredan de MiExcepcionPersonalizada.
  2. Función verificar_valor:

    • Verifica si el valor está dentro del rango permitido (1 a 100).
    • Lanza ValorDemasiadoAltoError si el valor es mayor que 100.
    • Lanza ValorDemasiadoBajoError si el valor es menor que 1.
    • Imprime un mensaje si el valor está dentro del rango permitido.
  3. Bloque try-except:

    • Llama a la función verificar_valor con un valor de 150.
    • Captura y maneja las excepciones ValorDemasiadoAltoError y ValorDemasiadoBajoError.

Ejercicio Práctico

Ejercicio

Crea una excepción personalizada llamada EdadInvalidaError que se lanzará cuando una función llamada verificar_edad reciba una edad que no esté en el rango de 0 a 120. La función debe lanzar la excepción con un mensaje adecuado si la edad es inválida.

Solución

class EdadInvalidaError(Exception):
    """Excepción lanzada cuando la edad no está en el rango permitido"""
    pass

def verificar_edad(edad):
    if edad < 0 or edad > 120:
        raise EdadInvalidaError("La edad debe estar entre 0 y 120 años.")
    else:
        print("La edad es válida.")

# Probando la función
try:
    verificar_edad(150)
except EdadInvalidaError as e:
    print(e)

Explicación de la Solución

  1. Definición de Excepción:

    • EdadInvalidaError: Excepción personalizada que se lanza cuando la edad no está en el rango permitido.
  2. Función verificar_edad:

    • Verifica si la edad está dentro del rango permitido (0 a 120).
    • Lanza EdadInvalidaError si la edad es menor que 0 o mayor que 120.
    • Imprime un mensaje si la edad está dentro del rango permitido.
  3. Bloque try-except:

    • Llama a la función verificar_edad con un valor de 150.
    • Captura y maneja la excepción EdadInvalidaError.

Conclusión

Las excepciones personalizadas son una herramienta poderosa para manejar errores específicos en nuestras aplicaciones. Nos permiten proporcionar mensajes de error claros y específicos, lo que facilita la depuración y el mantenimiento del código. En el siguiente módulo, exploraremos temas avanzados como decoradores y generadores, que nos permitirán escribir código más eficiente y reutilizable.

Curso de Programación en Python

Módulo 1: Introducción a Python

Módulo 2: Estructuras de Control

Módulo 3: Funciones y Módulos

Módulo 4: Estructuras de Datos

Módulo 5: Programación Orientada a Objetos

Módulo 6: Manejo de Archivos

Módulo 7: Manejo de Errores y Excepciones

Módulo 8: Temas Avanzados

Módulo 9: Pruebas y Depuración

Módulo 10: Desarrollo Web con Python

Módulo 11: Ciencia de Datos con Python

Módulo 12: Proyecto Final

© Copyright 2024. Todos los derechos reservados