Excepciones en Python: manejo de errores sin esconder problemas

Aprende a capturar errores previsibles, propagar los que no controlas y diseñar flujos robustos con `try/except/else/finally`.

Manejar errores no es "evitar crashes a toda costa": es controlar escenarios esperables y dejar visibles los fallos de diseño.

Una captura demasiado amplia (`except Exception`) puede ocultar bugs críticos y hacer más difícil depurar producción.

La regla práctica: captura lo que realmente puedas manejar en ese nivel y propaga lo demás.

`else` y `finally` ayudan a separar ruta exitosa de limpieza de recursos.

  • Captura concreta = diagnóstico claro.
  • Si sabes que una conversión puede fallar por formato, captura `ValueError`, no todas las excepciones posibles.
  • Cada tipo de excepción comunica una categoría de fallo distinta; aprovecharlo mejora observabilidad.
  • Un mensaje de error útil debe indicar qué entrada falló y por qué.
  • `else` se ejecuta si no hubo excepción; `finally` siempre se ejecuta.

1) `try/except`: capturas específicas

Captura concreta = diagnóstico claro.

Si sabes que una conversión puede fallar por formato, captura `ValueError`, no todas las excepciones posibles.

Cada tipo de excepción comunica una categoría de fallo distinta; aprovecharlo mejora observabilidad.

Un mensaje de error útil debe indicar qué entrada falló y por qué.

2) `else` y `finally`: separar éxito y limpieza

`else` se ejecuta si no hubo excepción; `finally` siempre se ejecuta.

Usa `else` para lógica que solo debe ocurrir cuando la operación principal fue correcta.

Usa `finally` para cerrar conexiones, liberar recursos o registrar eventos de cierre.

Este patrón evita duplicar limpieza en múltiples ramas de error/éxito.

  • `except` para errores esperables.
  • `else` para ruta de éxito.
  • `finally` para cleanup garantizado.
  • No mezcles todo en un único bloque extenso.

3) Diseño de errores de dominio

No todos los errores son técnicos; muchos son de negocio.

Crear excepciones propias (`class SaldoInsuficienteError(Exception): ...`) hace el dominio más expresivo.

Diferenciar errores de validación, infraestructura y lógica simplifica respuesta en API/CLI.

Cuando el error es recuperable, devuelve feedback claro; cuando no lo es, propágalo con contexto.

Python
11

Excepciones en Python: manejo de errores sin esconder problemas

Aprende a capturar errores previsibles, propagar los que no controlas y diseñar flujos robustos con `try/except/else/finally`.

Código del tema: try: ... except Exception as e: ...

📘 Teoría

1) `try/except`: capturas específicas

Captura concreta = diagnóstico claro.

1

Si sabes que una conversión puede fallar por formato, captura `ValueError`, no todas las excepciones posibles.

2

Cada tipo de excepción comunica una categoría de fallo distinta; aprovecharlo mejora observabilidad.

3

Un mensaje de error útil debe indicar qué entrada falló y por qué.

2) `else` y `finally`: separar éxito y limpieza

`else` se ejecuta si no hubo excepción; `finally` siempre se ejecuta.

Usa `else` para lógica que solo debe ocurrir cuando la operación principal fue correcta.

Usa `finally` para cerrar conexiones, liberar recursos o registrar eventos de cierre.

Este patrón evita duplicar limpieza en múltiples ramas de error/éxito.

  • `except` para errores esperables.
  • `else` para ruta de éxito.
  • `finally` para cleanup garantizado.
  • No mezcles todo en un único bloque extenso.

3) Diseño de errores de dominio

No todos los errores son técnicos; muchos son de negocio.

1

Crear excepciones propias (`class SaldoInsuficienteError(Exception): ...`) hace el dominio más expresivo.

2

Diferenciar errores de validación, infraestructura y lógica simplifica respuesta en API/CLI.

3

Cuando el error es recuperable, devuelve feedback claro; cuando no lo es, propágalo con contexto.

🧪 Aprende probando

Ejemplo Ejemplo: parseo defensivo de entrada Captura error de formato y devuelve fallback controlado para no romper flujo.

🏁 Retos

Reto Reto: captura `ValueError` de forma específica Añade manejo explícito para entrada inválida en conversión numérica.

🧰 Recursos

Test

Comprueba tus conocimientos con un test sobre Python.

Test de Python

¿Qué es esto?

Soy Cristian Eslava y a veces hago webs para procrastinar yo y vosotros. culTest

La hice en febrero de 2026 para facilitar el aprendizaje de mis alumnos. La idea es aprender desarrollo web practicando y que el proyecto siga creciendo con nuevos temas, tests y retos.

Está inspirada en MDN, W3Schools, CodePen, Manz y muchos otros sitios de documentación sobre desarrollo web. Quería combinar teoría útil, ejemplos ejecutables, retos y el sistema de tests que ya tenía en culTest. culTest

Si te gustó, si no te gustó o si quieres escribirme, puedes hacerlo en cristianeslava@gmail.com