Curso de Python Intermedio para  Entornos virtuales y PEP8

Cómo crear excepciones personalizadas en Python

Curso de Python Intermedio para Entornos virtuales y PEP8

Contenido del curso

Cómo crear excepciones personalizadas en Python

Resumen

Crear excepciones personalizadas en Python es lo que te permite decidir qué errores mostrarle a otros desarrolladores que usen tu aplicación. Si ya dominas try, except y finally, este es el paso que convierte tu manejo de errores en algo profesional y legible. Ideal para quien construye APIs o trabaja en equipo.

En lugar de devolver un JSON con una lista vacía cuando algo falla, aprenderás a lanzar un error claro y a capturarlo donde tú quieras. Y aquí viene lo interesante: quien use tu función decide qué mensaje mostrar, o si mostrarlo.

Qué hace la palabra raise en Python

La palabra raise es la que lanza una nueva excepción y detiene la ejecución del código, exactamente igual que lo hace Python por defecto cuando ocurre un error [00:57].

Cuando lanzas un error con raise, el flujo salta al bloque finally y luego muestra en consola el traceback con tu mensaje. Un ejemplo sencillo: prohibir la división cuando el número B es igual a 2.

python try: if b == 2: raise Exception("No está permitido el cálculo por 2") resultado = a / b except Exception as e: print(e) finally: print("Operación finalizada")

Al ejecutar con 100 y 2, se imprime primero el finally y después el error con tu mensaje personalizado.

¿Para qué sirve raise en Python? Sirve para lanzar una excepción y detener la ejecución del código. Puedes usar una excepción de Python o una que tú mismo creaste, pasándole el mensaje que quieras mostrar.

Cómo creo mi propia clase de excepción

En vez de usar la Exception genérica de Python, puedes crear una subclase que herede de ella. Así logras que otros capturen un error específico y no todos los errores disponibles.

python class DivisionError(Exception): """Error en operación""" pass

Lo que va dentro de los paréntesis es la herencia: DivisionError hereda de Exception [02:07]. Luego, en lugar de lanzar la excepción genérica, lanzas tu nueva clase con raise DivisionError(...).

¿Por qué importa esto? Porque si capturas Exception, atrapas todos los errores de Python. Con una clase propia, el desarrollador puede capturar solo DivisionError y tratar ese caso puntual.

Cuáles son las cuatro cláusulas del manejo de errores

Estas son las piezas que componen todo el manejo de errores en Python, tal como se explican en el recap [03:00]:

  • try: contiene el código que crees que podría fallar.
  • raise: detiene la ejecución y lanza un error del tipo que le indiques.
  • except: captura un tipo de error específico, o todos si usas Exception.
  • finally: siempre se ejecuta, incluso cuando hay un error.

Un detalle práctico: si pones un print por fuera del finally, no se imprimirá cuando ocurra un error inesperado. Por eso el finally es tu red de seguridad.

Cómo agrupo las excepciones de mi aplicación

Una buena práctica es crear una excepción base para toda tu aplicación y hacer que las demás hereden de ella. Así todas quedan agrupadas bajo un mismo error general.

python class NewsSystemError(Exception): """Error general en la app""" pass

class ApiKeyError(NewsSystemError): """Error cuando la API key es inválida""" pass

En el cliente de News API, en vez de retornar articles con una lista vacía, lanzas la excepción con un mensaje claro [04:36]:

python raise ApiKeyError("Ocurrió un error, no se pudo conectar con la API")

¿Por qué crear una excepción base en Python? Porque agrupa todos los errores de tu aplicación bajo una misma clase. Así puedes capturar el error general o uno específico que herede de él, según lo que necesites.

Cómo capturo el error donde uso la función

Como esa función puede fallar, tienes que manejar el error donde la utilices, por ejemplo en un fetch news. Ahí entra el try y el except, capturando la excepción con as e para usarla en el print.

Un tropiezo común aparece aquí: al fallar la API key, responseData queda sin definir. La solución es inicializarlo como None y agregar una validación, para que si ocurre un error se quede con ese valor.

python response_data = None try: response_data = client.fetch_news() except ApiKeyError as e: print(e)

Al volver a ejecutar con una API key dañada, la consola muestra solo el mensaje limpio: Ocurrió un error, no se pudo conectar con la API [06:15].

¿Qué pasa si una variable queda sin definir tras un error? Python lanza un error diciendo que no está definida. Para evitarlo, inicializa la variable como None antes del try y valida su valor después.

Con esto logras manejar el error justo en la parte del código donde el desarrollador está trabajando. Hoy eres tú, pero mañana, en un equipo grande, cada persona decidirá qué mensaje mostrar o si conviene mostrarlo.

Ahora te toca a ti: crea una excepción personalizada que funcione en la aplicación y compártela en el sistema de comentarios.