0Pricing
Python Academy · Lección

Clases de excepciones personalizadas

Defina sus propios tipos de excepción para comunicar los errores con mayor claridad.

Clases de excepciones personalizadas es una lección gratuita de Python Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Python Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Python Academy incluye 4 lecciones en total.

Introducción

Las clases de excepciones personalizadas hacen que la gestión de errores sea explícita, autoexplicativa y fácil de gestionar con precisión para quienes llaman al código.

¿Por qué utilizar excepciones personalizadas?

Las excepciones integradas son demasiado genéricas. Las personalizadas permiten que quienes llaman al código capturen únicamente los errores de SU biblioteca sin capturar otros no relacionados.
class AppError(Exception):
    pass
raise AppError('something went wrong')

Heredar de Exception

class MyError(Exception): pass es todo lo que necesita. Herede siempre de Exception, no de BaseException.
class ValidationError(Exception):
    pass
try:
    raise ValidationError('email is invalid')
except ValidationError as e:
    print(e)

Añadir atributos personalizados

class APIError(Exception): def __init__(self, status, message): self.status = status; super().__init__(message)
class APIError(Exception):
    def __init__(self, status, message):
        self.status = status
        super().__init__(message)
try:
    raise APIError(404, 'Not found')
except APIError as e:
    print(e.status, e)

Jerarquía de excepciones

Construya una jerarquía: class DBError(AppError): pass. Quienes llamen al código podrán capturar AppError para cualquier error de la aplicación o DBError específicamente.
class AppError(Exception): pass
class DBError(AppError): pass
class NetworkError(AppError): pass
try:
    raise DBError('timeout')
except AppError as e:
    print('app error:', e)

Método __str__ personalizado

Reemplace __str__ para controlar el aspecto del mensaje de la excepción al imprimirlo.
class RangeError(ValueError):
    def __init__(self, val, lo, hi):
        self.val, self.lo, self.hi = val, lo, hi
    def __str__(self):
        return f'{self.val} not in [{self.lo}, {self.hi}]'
print(RangeError(15, 0, 10))

Lanzar excepciones personalizadas

Utilice raise en sus funciones para señalar errores específicos del dominio. Esto crea una API clara para quienes llaman al código.
class InsufficientFundsError(Exception):
    def __init__(self, needed, available):
        super().__init__(f'Need {needed}, have {available}')
def withdraw(balance, amount):
    if amount > balance:
        raise InsufficientFundsError(amount, balance)
    return balance - amount
try:
    withdraw(100, 200)
except InsufficientFundsError as e:
    print(e)

Capturar mediante la clase base

except AppError captura todas las subclases: DBError, NetworkError, etc. La jerarquía permite elegir el nivel de especificidad.
class AppError(Exception): pass
class DBError(AppError): pass
try:
    raise DBError('conn failed')
except AppError:
    print('any app error')

Excepción con un gestor de contexto

Las excepciones personalizadas se integran con los gestores de contexto: class suppressed: __exit__ devuelve True para suprimir la excepción.
class SuppressValue(Exception): pass
try:
    raise SuppressValue('ignored')
except SuppressValue:
    pass  # suppress silently
print('continued')

Documentar excepciones personalizadas

Documente CUÁNDO lanzarlas y QUÉ significan sus atributos. Unas buenas cadenas de documentación hacen que las excepciones personalizadas sean fáciles de utilizar.
class ConfigError(Exception):
    """Raised when configuration is invalid.
    Attributes:
        key: The invalid config key
    """
    def __init__(self, key, msg):
        super().__init__(msg)
        self.key = key

Prácticas recomendadas

Mantenga la jerarquía poco profunda (2 o 3 niveles). Herede siempre de Exception. Utilice nombres descriptivos que terminen en Error. Coloque las excepciones en un módulo dedicado exceptions.py.
# Good structure:
class AppError(Exception): pass
class ValidationError(AppError): pass
class NotFoundError(AppError): pass
print('hierarchy demo')

Comprobación rápida

¿De qué clase deben heredar las excepciones personalizadas para evitar capturar eventos que cierran el sistema?

Resumen

Excepciones personalizadas: heredan de Exception, añaden atributos en __init__ y reemplazan __str__. Construya jerarquías para facilitar su captura. Colóquelas en el módulo exceptions.py.

Siga avanzando

¡Excelente trabajo! Continúe con la siguiente lección para seguir progresando.

Preguntas frecuentes

¿La lección «Clases de excepciones personalizadas» es gratis?

Sí — el texto completo de «Clases de excepciones personalizadas» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Python Academy, actualiza a CoddyKit PRO. El curso de Python Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Clases de excepciones personalizadas»?

Defina sus propios tipos de excepción para comunicar los errores con mayor claridad. Practicas Python Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Python Academy?

No se requiere experiencia previa. Python Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.

¿Cuánto tiempo toma la lección «Clases de excepciones personalizadas»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Python Academy?

Sí. Cada lección de Python Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Comprensión de las excepciones
  2. try / except / else / finally
  3. Lanzamiento y relanzamiento de excepciones
  4. Clases de excepciones personalizadas
← Volver a Python Academy