Web informativa e independiente. No vende herramientas ni usa enlaces de afiliado. La IA puede equivocarse: verifica siempre lo importante y no compartas datos personales o confidenciales sin base legal.

Ejemplo resuelto: depurar un error de código con IA

Este ejemplo es ilustrativo y el código y los datos son inventados. Muestra cómo presentar un error a un asistente de IA con la información necesaria, qué corrección puede proponer y cómo comprobar que de verdad resuelve el problema.

El caso

Sara está aprendiendo Python y ha escrito una función que calcula el importe medio de las ventas de cada categoría de una tienda. Al ejecutarla con una lista de ventas de prueba, el programa se detiene con un KeyError. No entiende por qué, porque la categoría «bebidas» existe en los datos. Quiere entender la causa y arreglarlo sin reescribir todo el programa.

Prompt utilizado

Estoy aprendiendo Python 3. Esta función debería devolver el importe medio por categoría, pero falla. Explícame la causa con palabras sencillas, propón una corrección mínima y dime cómo probarla.

Código:
def media_por_categoria(ventas):
    totales = {}
    cuentas = {}
    for v in ventas:
        cat = v["categoria"]
        totales[cat] += v["importe"]
        cuentas[cat] += 1
    return {c: totales[c] / cuentas[c] for c in totales}

Datos de prueba: ventas = [{"categoria": "bebidas", "importe": 3.5}, {"categoria": "bebidas", "importe": 2.5}]

Error: KeyError: 'bebidas' en la línea totales[cat] += v["importe"]

Indica si ves otros problemas posibles y avísame si algo de tu explicación no es seguro.

Respuesta ilustrativa de un asistente

Causa: la línea totales[cat] += v["importe"] equivale a totales[cat] = totales[cat] + v["importe"]. Para calcular la parte derecha, Python primero busca totales[cat]. Como totales empieza vacío, la primera vez que aparece «bebidas» esa clave no existe y se produce el KeyError. La categoría está en los datos, pero todavía no está en el diccionario.

Corrección mínima: usar defaultdict, que crea un valor inicial cuando se consulta una clave ausente.

from collections import defaultdict

def media_por_categoria(ventas):
    totales = defaultdict(float)
    cuentas = defaultdict(int)
    for v in ventas:
        cat = v["categoria"]
        totales[cat] += v["importe"]
        cuentas[cat] += 1
    return {c: totales[c] / cuentas[c] for c in totales}

Alternativa sin importar nada: totales[cat] = totales.get(cat, 0) + v["importe"], y lo mismo con cuentas.

Cómo probarla: con los datos de prueba debe devolver {'bebidas': 3.0}, porque la media de 3,5 y 2,5 es 3. Prueba también con una lista vacía, que debe devolver un diccionario vacío, y con dos categorías.

Otros posibles problemas:
- Si alguna venta no tuviera la clave «categoria» o «importe», volvería a aparecer un KeyError, pero de otro tipo.
- Si los importes llegaran como texto, habría que convertirlos con float().

Mi explicación asume Python 3 y que ventas es una lista de diccionarios como el ejemplo.

Qué revisar antes de usarla

  • Ejecutar el código corregido con los datos de prueba y comprobar que devuelve exactamente 3.0 para la categoría «bebidas».
  • Probar los casos límite: lista vacía, una sola venta y varias categorías mezcladas.
  • Confirmar que la explicación de la causa coincide con el traceback: el fallo está en la lectura de totales[cat], no en los datos.
  • Verificar que la corrección importa defaultdict desde collections y que no se ha cambiado el comportamiento del resto de la función.
  • Comprobar que el código no hace nada inesperado con claves ausentes en los datos de entrada y decidir cómo quieres tratarlas.

Versión final tras la revisión

from collections import defaultdict

def media_por_categoria(ventas):
    """Devuelve el importe medio de las ventas de cada categoría."""
    totales = defaultdict(float)
    cuentas = defaultdict(int)
    for v in ventas:
        cat = v["categoria"]
        totales[cat] += v["importe"]
        cuentas[cat] += 1
    return {c: totales[c] / cuentas[c] for c in totales}

Pruebas realizadas por Sara:
- Con dos ventas de bebidas (3,5 y 2,5) devuelve {'bebidas': 3.0}.
- Con una lista vacía devuelve {}.
- Con una venta de bebidas y otra de comida devuelve una media para cada una.

Qué aprendió: el operador += necesita que la clave exista antes de sumar; defaultdict crea el valor inicial automáticamente. Si una venta no tuviera categoría, el programa seguirá fallando, así que valorará validar los datos antes de calcular.

Lecciones del ejemplo

  • Pegar el código, los datos de prueba y el mensaje de error completo permite al asistente localizar la causa en lugar de adivinar.
  • Pedir la causa en palabras sencillas, además de la corrección, ayuda a aprender y a no repetir el fallo.
  • Toda corrección debe ejecutarse y probarse, incluidos los casos límite, antes de darla por buena.
  • No pegues claves, contraseñas ni datos personales reales en el código que compartas con un asistente.

Preguntas frecuentes

¿Qué información debo darle a la IA para depurar un error?

El fragmento de código relevante, el mensaje de error completo con la línea indicada, un ejemplo de datos de entrada, la versión del lenguaje y lo que esperabas que ocurriera. Cuanto más concreto sea, menos adivinará el asistente.

¿Y si la corrección que propone no funciona?

Vuelve a pegar el código modificado y el nuevo error. Los asistentes pueden proponer arreglos plausibles pero incorrectos. Si tras dos intentos no avanzas, simplifica el caso a un ejemplo mínimo o pide ayuda a alguien con experiencia.

¿Debo confiar en código que no entiendo?

No. Pide una explicación línea a línea y ejecútalo en un entorno de pruebas antes de usarlo en un proyecto real. Si no entiendes por qué funciona, es fácil que falle más adelante sin que sepas dónde mirar.

Guía completa de la tarea: Cómo depurar código con la ayuda de un asistente de IA.

Fuentes oficiales para profundizar

Última revisión: . Esta web es informativa y no sustituye el consejo de un profesional.