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
-
Definición de Excepciones:
MiExcepcionPersonalizada
: Clase base para nuestras excepciones personalizadas.ValorDemasiadoAltoError
yValorDemasiadoBajoError
: Excepciones específicas que heredan deMiExcepcionPersonalizada
.
-
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.
-
Bloque
try-except
:- Llama a la función
verificar_valor
con un valor de 150. - Captura y maneja las excepciones
ValorDemasiadoAltoError
yValorDemasiadoBajoError
.
- Llama a la función
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
-
Definición de Excepción:
EdadInvalidaError
: Excepción personalizada que se lanza cuando la edad no está en el rango permitido.
-
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.
-
Bloque
try-except
:- Llama a la función
verificar_edad
con un valor de 150. - Captura y maneja la excepción
EdadInvalidaError
.
- Llama a la función
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
- Introducción a Python
- Configuración del Entorno de Desarrollo
- Sintaxis de Python y Tipos de Datos Básicos
- Variables y Constantes
- Entrada y Salida Básica
Módulo 2: Estructuras de Control
- Sentencias Condicionales
- Bucles: for y while
- Herramientas de Control de Flujo
- Comprensiones de Listas
Módulo 3: Funciones y Módulos
- Definición de Funciones
- Argumentos de Función
- Funciones Lambda
- Módulos y Paquetes
- Visión General de la Biblioteca Estándar
Módulo 4: Estructuras de Datos
Módulo 5: Programación Orientada a Objetos
Módulo 6: Manejo de Archivos
- Lectura y Escritura de Archivos
- Trabajo con Archivos CSV
- Manejo de Datos JSON
- Operaciones de Archivos y Directorios
Módulo 7: Manejo de Errores y Excepciones
- Introducción a las Excepciones
- Manejo de Excepciones
- Lanzamiento de Excepciones
- Excepciones Personalizadas
Módulo 8: Temas Avanzados
- Decoradores
- Generadores
- Administradores de Contexto
- Concurrencia: Hilos y Procesos
- Asyncio para Programación Asíncrona
Módulo 9: Pruebas y Depuración
- Introducción a las Pruebas
- Pruebas Unitarias con unittest
- Desarrollo Guiado por Pruebas
- Técnicas de Depuración
- Uso de pdb para Depuración
Módulo 10: Desarrollo Web con Python
- Introducción al Desarrollo Web
- Fundamentos del Framework Flask
- Construcción de APIs REST con Flask
- Introducción a Django
- Construcción de Aplicaciones Web con Django
Módulo 11: Ciencia de Datos con Python
- Introducción a la Ciencia de Datos
- NumPy para Computación Numérica
- Pandas para Manipulación de Datos
- Matplotlib para Visualización de Datos
- Introducción al Aprendizaje Automático con scikit-learn