Logo de CursoIA
CursoIA Curso de Inteligencia Artificial

Python desde cero - enfoque científico, Unidad 7 — Manejo de errores y robustez, 7.1 — Errores en Python ·

Mensajes de error

Mensajes de error

Introducción

En programación científica, la comprensión y manejo adecuado de los errores es fundamental para garantizar que nuestro código funcione correctamente. Los mensajes de error son una herramienta crucial para diagnosticar problemas en nuestro código. En este artículo, exploraremos cómo interpretar diferentes tipos de errores comunes en Python, cómo escribir mejores mensajes de error y cómo prepararnos para evitarlos.

Explicación principal con ejemplos

Tipos de errores comunes en Python

Python utiliza una jerarquía de excepciones basada en la clase Exception. Algunas de las excepciones más comunes son:

  • SyntaxError: Se produce cuando el código no cumple con las reglas de sintaxis del lenguaje.
  # Ejemplo: Falta un paréntesis
  print("Hola)   # SyntaxError: EOL while scanning string literal
  • NameError: Se genera cuando se intenta usar una variable que no ha sido definida previamente.
  # Ejemplo: Usar una variable sin definirla
  print(mensaje)  # NameError: name 'mensaje' is not defined
  • TypeError: Se produce cuando se realizan operaciones incompatibles entre tipos de datos.
  # Ejemplo: Sumar un entero y una cadena
  print(5 + "hola")  # TypeError: unsupported operand type(s) for +: 'int' and 'str'
  • ValueError: Se genera cuando se proporciona un argumento correcto pero con un valor incorrecto.
  # Ejemplo: Convertir una cadena en un entero que no es numérico
  int("abc")  # ValueError: invalid literal for int() with base 10: 'abc'
  • IndexError: Se produce cuando se intenta acceder a un índice que está fuera del rango de una lista o cualquier estructura de datos similar.
  # Ejemplo: Acceder al primer elemento de una lista vacía
  lista = []
  print(lista[0])  # IndexError: list index out of range
  • KeyError: Se genera cuando se intenta acceder a un diccionario usando una clave que no existe.
  # Ejemplo: Acceder a una clave inexistente en un diccionario
  d = {"clave": "valor"}
  print(d["nueva_clave"])  # KeyError: 'nueva_clave'

Mejorar los mensajes de error

Para mejorar la legibilidad y la facilidad de depuración, es importante proporcionar mensajes de error más descriptivos. Podemos hacer esto definiendo nuestras propias excepciones y utilizando el método __str__ para devolver un mensaje personalizado.

class MiErrorPersonalizado(Exception):
    """Clase base para nuestros errores personalizados."""
    
    def __init__(self, mensaje):
        self.mensaje = mensaje

    def __str__(self):
        return f"MiErrorPersonalizado: {self.mensaje}"

def dividir(x, y):
    if y == 0:
        raise MiErrorPersonalizado("No se puede dividir por cero")
    
    return x / y

Errores típicos / trampas

Trampa 1: Ignorar los errores con pass

A veces, podrías encontrarte con la tentación de usar pass para ignorar un error. Esto es particularmente problemático en bucles o funciones que se ejecutan múltiples veces.

for i in range(5):
    try:
        print(dividir(i, 0))
    except MiErrorPersonalizado:
        pass

# Resultado: No se mostrará nada porque el error es ignorado

Trampa 2: Usar print para manejar excepciones

Mientras que imprimir un mensaje de error puede ser útil en desarrollo, no es una buena práctica para producción. Los mensajes de error deben ser manejados utilizando bloques try-except.

for i in range(5):
    print(dividir(i, 0))

# Resultado: No se mostrará nada porque dividir() lanza un MiErrorPersonalizado

Trampa 3: No capturar la excepción adecuadamente

A veces, podrías capturar una excepción general sin especificar el tipo. Esto puede ocultar problemas más graves y no permitirte manejar diferentes tipos de errores de manera distinta.

for i in range(5):
    try:
        print(dividir(i, 0))
    except:  # Trampa: Captura general
        print("Ocurrió un error")

# Resultado: No se mostrará nada porque el error es capturado por la excepción general

Checklist accionable

  1. Verifica siempre que las variables estén definidas antes de usarlas.
  2. Evita operaciones con tipos de datos incompatibles.
  3. Asegúrate de que los índices y claves existan en las estructuras de datos antes de acceder a ellos.
  4. Usa try-except para manejar excepciones específicas.
  5. Evita usar pass o print para manejar excepciones.

Siguientes pasos

  • Aprende sobre el manejo de excepciones en la documentación oficial de Python.
  • Practica creando tus propias excepciones y proporciona mensajes personalizados.
  • Revisa regularmente tu código para asegurarte de que manejes adecuadamente los errores.

Seguir estos pasos te ayudará a escribir código más robusto y menos propenso a errores, lo cual es especialmente importante en el contexto científico donde la precisión y reproducibilidad son cruciales.

Contacto

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