Logo de CursoIA
CursoIA Curso de Inteligencia Artificial

Python desde cero - enfoque científico, Unidad 7 — Manejo de errores y robustez, 7.2 — Excepciones ·

try y except

try y except: Controlando errores en Python

Introducción

En la programación científica, es fundamental manejar los errores de manera adecuada para garantizar que nuestros programas no se detengan abruptamente cuando algo sale mal. Los errores pueden ser causados por diversos factores como datos inválidos, archivos corrompidos o condiciones inesperadas en el flujo del programa. En este artículo, exploraremos cómo usar try y except para manejar excepciones en Python de manera efectiva.

Explicación principal

Python proporciona una forma poderosa de controlar errores a través de las estructuras try y except. La idea es que el código potencialmente peligroso se coloque dentro del bloque try, y cualquier error que ocurra se maneja en el bloque except.

Estructura básica

try:
    # Código susceptible a errores
except SomeException:
    # Manejo del error

Puedes tener múltiples bloques except para manejar diferentes tipos de excepciones. Por ejemplo:

try:
    resultado = 10 / 0
except ZeroDivisionError:
    print("No se puede dividir por cero")
except TypeError:
    print("Tipos incompatibles en la operación")

Errores típicos / trampas

Trampa 1: No manejar todas las excepciones posibles

Manejar solo una o dos excepciones es atractivo porque puede hacer que el código parezca más simple, pero esto puede ocultar problemas más graves. Es mejor ser exhaustivos en la lista de excepciones.

try:
    resultado = 10 / 0
except:  # No se recomienda usar except sin especificar una clase de error
    print("Se ha producido un error")

Trampa 2: Usar excepciones para controlar flujo

Usar except como forma de controlar el flujo normal del programa puede hacer que el código sea confuso e inintuitivo. Los bloques try-except están diseñados para manejar errores, no para controlar la lógica principal.

def dividir(a, b):
    try:
        return a / b
    except:  # No se recomienda usar except sin especificar una clase de error
        print("Operación cancelada")
        return None

resultado = dividir(10, 0)  # Devolverá None en lugar de lanzar un error

Trampa 3: Ignorar los errores

A veces, se puede temer que imprimir o registrar errores pueda perturbar el flujo del programa. Sin embargo, ignorar los errores no resuelve ningún problema y puede hacer que los bugs sean más difíciles de diagnosticar.

try:
    abrir_archivo('ruta_no_existe.txt')
except FileNotFoundError:  # No se recomienda usar except sin especificar una clase de error
    pass  # Ignorar el error, pero esto no es una buena práctica

print("Continuando con la ejecución")

Checklist accionable

  1. Identifica las posibles excepciones: Antes de escribir tu código, piensa en qué tipos de errores podrían ocurrir y cómo manejarlos.
  2. Usa bloques except específicos: Evita usar except: sin especificar una clase de error. Si necesitas capturar cualquier tipo de excepción, considera usar except Exception.
  3. Maneja cada excepción adecuadamente: Asegúrate de que el manejo del error resuelva la problemática específica.
  4. Evita usar except para controlar flujo: Usa bloques try y else o finally para controlar el flujo normal del programa.
  5. Registra los errores: En lugar de simplemente ignorarlos, registra los errores en un archivo de log o utiliza una herramienta de monitorización.

Siguientes pasos

  1. Practica con ejemplos reales: Trata de implementar el manejo de excepciones en proyectos reales.
  2. Leer documentación oficial: Consulta la documentación oficial de Python sobre excepciones y manejo de errores para una comprensión más profunda.
  3. Usa bibliotecas de terceros: Existen muchas bibliotecas que pueden ayudarte a manejar errores más eficientemente, como logging o try-except en librerías como NumPy.

Siguiendo estos consejos, podrás escribir programas más robustos y seguros en Python, lo cual es especialmente valioso en la programación científica.

Contacto

Indica tu objetivo (ChatGPT, RAG, agentes, automatización) y tu stack (web/backend).