La cláusula finally en Python te permite ejecutar código sin importar si tu programa lanza un error o corre sin problemas. Si programas en Python y quieres liberar recursos o mostrar mensajes antes de que un fallo rompa tu aplicación, aquí entiendes cómo funciona y por qué importa.
Cuando trabajas con manejo de errores, ya conoces el bloque try y except. Pero hay un problema: existen errores que no sabes que existen y que igual pueden aparecer. Ahí es donde finally se vuelve tu red de seguridad.
Por qué usar finally en lugar de un print normal
A primera vista podrías pensar que basta con poner un print después del try except. La diferencia es clave: el código dentro de finally se ejecuta siempre, ocurra o no una excepción [00:04].
Si solo colocas un print después del bloque y el programa se rompe antes de llegar a esa línea, ese mensaje nunca aparece. En cambio, finally se ejecuta justo antes de que el programa lance la excepción y se interrumpa.
¿Qué hace la cláusula finally en Python? Ejecuta un bloque de código siempre, sin importar si ocurre un error o no. Sirve para liberar recursos, cerrar archivos o desconectarte de un servidor antes de que el programa termine.
Para usarlo, escribes finally después de todos los except y dentro colocas la acción que necesitas. En el ejemplo de la clase se usa un simple print("print desde finally") para demostrar que ese mensaje aparece incluso cuando el usuario cancela la ejecución [01:37].
Cómo se comporta finally ante un error inesperado
En la práctica, el ejemplo captura dos errores conocidos: cuando alguien escribe letras en vez de números y no se pueden convertir a entero, y cuando se intenta dividir entre cero [02:14].
Pero falta capturar otro caso. Al presionar control+C, Python muestra un KeyboardInterrupt, es decir, la cancelación manual de la ejecución [02:40]. Y aquí viene lo interesante: aunque esa excepción no está manejada, el print desde finally igual se imprime antes de que el programa se rompa.
Esto confirma la idea central: cuando una excepción no está bien manejada, el software se interrumpe o se rompe, pero finally alcanza a ejecutar su acción de limpieza.
Cómo encontrar la excepción correcta para capturar
No tienes que adivinar qué errores existen. Python trae una lista completa de excepciones ya implementadas que puedes empezar a capturar [00:44].
Un recurso valioso es la documentación oficial de Python, donde encuentras todas las excepciones disponibles [03:20]. Entre ellas aparecen ejemplos concretos:
- BaseException, la base a partir de la cual puedes crear nuevas excepciones.
- ImportError, cuando falla una importación.
- IndexError, cuando accedes a un índice inexistente.
- KeyboardInterrupt, que se lanza cuando el usuario presiona la interrupt key, normalmente control+C o delete.
La recomendación es investigar estas excepciones y ver cuál encaja con tu aplicación para implementarla.
Cómo aplicar el manejo de errores en un caso real
En la implementación de noticias, la clave es identificar cuál excepción quieres capturar. Un truco práctico: dañar la API key a propósito para dejarla inválida y ejecutar el código [04:32].
Así Python te muestra la excepción que no fue manejada y ves exactamente cuál se lanzó. Con esa información, envuelves la definición en un try y un except usando esa misma excepción.
¿Cómo evito que mi programa se rompa por una API key inválida? Captura la excepción con try y except, y devuelve un valor seguro como un diccionario vacío. Así quien use tu cliente no falla y puedes mostrar un mensaje claro del error.
En el ejemplo, el News API client retorna response articles. La solución es devolverlo vacío cuando la API key es inválida, para que la aplicación no falle, e imprimir un mensaje como "la API key es inválida" [05:30]. Al ejecutar, solo aparece ese mensaje controlado y ningún error mayor. Luego corriges la clave y la funcionalidad vuelve a operar por completo.
Para qué sirve realmente finally en tus proyectos
Más allá del print de ejemplo, el uso real de finally está en liberar recursos [06:30]. Piensa en un escenario concreto:
- Estás trabajando con muchos archivos abiertos.
- Ocurre un error inesperado a mitad del proceso.
- Dentro de finally liberas ese espacio en memoria para reutilizarlo en toda tu aplicación.
Ese patrón evita que tu programa deje archivos abiertos o conexiones colgadas cuando algo sale mal.
¿Cuándo debo usar finally? Úsalo cuando necesites garantizar una acción de limpieza, como cerrar archivos, liberar memoria o desconectarte de un servidor, sin importar si el código terminó bien o con error.
Como reto final, usa finally en la aplicación de Fetch News. Probablemente quieras mostrar un mensaje, liberar recursos o desconectarte de algún servidor cuando ocurra un error inesperado.
¿Ya identificaste qué recurso deberías liberar en tu propia aplicación? Cuéntanos en los comentarios cómo aplicarías finally en tu proyecto.