Resumen

Domina el manejo de excepciones en Python con confianza: aprende a usar los bloques try, except y finally para evitar bloqueos, mostrar mensajes claros y liberar recursos. Verás cómo capturar errores como ValueError, ZeroDivisionError y KeyboardInterrupt, y cómo responder cuando la API key es inválida en un client de noticias como NewsAPI.

¿Qué es finally y cuándo se ejecuta en Python?

El bloque finally se ejecuta siempre, ocurra o no una excepción. A diferencia de poner un print después del try y los except, el código dentro de finally corre incluso si el programa va a romperse por una excepción no manejada. Es ideal para liberar recursos, cerrar archivos o desconectarte de servicios antes de que la ejecución termine abruptamente.

  • Se ejecuta tras los except, con o sin error previo.
  • Sirve para liberar recursos y cerrar archivos.
  • Permite registrar mensajes justo antes del bloqueo.
  • Aporta robustez al flujo de la aplicación.

¿Cómo se estructura el bloque try/except/finally?

try:
    a = int(input("Número A: "))
    b = int(input("Número B: "))
    print(a / b)
except ValueError:
    print("Error: debes ingresar números enteros.")
except ZeroDivisionError:
    print("Error: B no puede ser cero.")
except KeyboardInterrupt:
    print("Ejecución cancelada por el usuario.")
finally:
    print("print desde finally")

print("Este es otro print")
  • ValueError: cuando se ingresan letras en vez de números.
  • ZeroDivisionError: cuando B es 0.
  • KeyboardInterrupt: cuando el usuario interrumpe con Ctrl+C o Delete.
  • El mensaje en finally aparece siempre; el de después del bloque puede no mostrarse si el programa se interrumpe antes.

¿Cómo identificar y capturar excepciones específicas?

Python ofrece una jerarquía de errores con BaseException como raíz y excepciones comunes como ImportError, IndexError y KeyboardInterrupt. Una práctica efectiva es reproducir el error para observar cuál excepción lanza Python y luego capturar esa clase específica con except.

  • Observa el rastro del error no manejado.
  • Copia la clase de excepción que aparece.
  • Agrega un except con esa excepción específica.
  • Evita capturar genéricamente si puedes precisar el tipo de error.

¿Por qué capturar KeyboardInterrupt en aplicaciones interactivas?

  • Permite mostrar un mensaje claro al usuario.
  • Evita trazas largas e innecesarias.
  • Asegura que se ejecute finally para liberar recursos.

¿Cómo manejar una API key inválida en un client de noticias?

En una implementación con un client de noticias como NewsAPI, cuando la API key es inválida Python lanza una excepción. La estrategia recomendada es capturar la excepción exacta que se muestra, registrar un mensaje y retornar una estructura segura para que el resto de la aplicación no falle, por ejemplo un diccionario con articles vacío.

¿Cómo aplicar try/except/finally en Fetch News?

def fetch_news(client):
    try:
        # Llama al método de tu client (p. ej., top_headlines)
        response = client.top_headlines()
        return response  # Estructura válida cuando todo sale bien.
    except Exception:  # Reemplaza con la excepción específica que te muestre Python.
        print("La API key es inválida")
        return {"articles": []}  # Entrega una respuesta segura para el resto del sistema.
    finally:
        # Libera recursos o desconéctate de servicios si aplica.
        print("Liberando recursos en finally")
  • Captura la excepción que obtuviste al ejecutar con la API key dañada.
  • Muestra un mensaje claro: "La API key es inválida".
  • Retorna {"articles": []} para evitar errores aguas arriba.
  • Usa finally para cerrar conexiones o liberar memoria.

¿Qué habilidades y conceptos refuerzas con este patrón?

  • Manejo de excepciones con try, except y finally.
  • Identificación de errores específicos: ValueError, ZeroDivisionError, KeyboardInterrupt.
  • Diseño de respuestas seguras: diccionarios vacíos en fallos de API key.
  • Liberación de recursos y cierre ordenado del flujo.

¿Tienes otra estrategia para usar finally en tu proyecto de Fetch News o en un client distinto? Cuéntala en los comentarios y comparte tu enfoque para manejar errores inesperados sin bloquear la aplicación.