Uso de IA en el trabajo

Corregir errores con Claude Code: reproducir → causa → cambio mínimo → volver a ejecutar

En lugar de limitarte a decirle a la IA que «da error», practicarás un flujo en el que primero reproduces el problema con la misma entrada, acotas la causa a partir del mensaje de excepción real y solicitas solo el cambio mínimo. Usaremos un CSV cuyo amount contiene una coma para reproducir un ValueError en Python y volveremos a ejecutar el código corregido para comprobar el resultado.

Ver el índice

Para quién esUsuarios principiantes que quieren controlar el proceso de corrección basándose en mensajes de error cuando falla una pequeña herramienta Python creada con Claude Code

Preparación
  • Entender el flujo de summarize.py y expenses.csv de los artículos anteriores
  • Poder ejecutar en la terminal comandos con el formato python summarize.py nombre_de_archivo
  • Conservar primero el archivo original y el mensaje de error aunque ocurra un fallo
  • Usar solo un CSV ficticio, no datos personales reales

01Reproducir primero el error con la misma entrada antes de corregir

Cuando aparece un error, el primer paso no es adivinar sino reproducirlo. En este ejemplo usamos un CSV ficticio donde uno de los valores de amount se ha cambiado por la cadena "1,450". Según las reglas de CSV, como la coma está dentro del valor se encierra entre comillas; al leerlo con el módulo csv, row['amount'] contiene la cadena '1,450'. Si el código existente llama directamente a int(row['amount']), no puede convertir esa cadena en un entero.

Instrucción
date,category,amount
2026-09-01,food,12000
2026-09-03,transport,"1,450"
2026-09-03,food,8500
2026-09-10,supplies,3200
2026-09-15,transport,1450
2026-10-02,food,9800
Instrucción
import csv
import sys
from collections import defaultdict

path = sys.argv[1]
monthly = defaultdict(int)

with open(path, encoding="utf-8", newline="") as f:
    reader = csv.DictReader(f)
    for row in reader:
        month = row["date"][:7]
        monthly[month] += int(row["amount"])

for month in sorted(monthly):
    print(f"{month} = {monthly[month]}")

Al ejecutar este código con `python summarize_buggy.py expenses_bad.csv`, se detiene en la fase de conversión antes de mostrar los totales correctos. El mismo código se ejecutó realmente con la herramienta Python del chat de GPT y se comprobó que la cadena de la excepción coincidía exactamente con el texto siguiente.

Instrucción
ValueError: invalid literal for int() with base 10: '1,450'

02Separar el valor que falló de la operación que falló al leer el error

Este mensaje ya contiene pistas importantes. La función que falla es int() y el valor que falla es '1,450'. Por tanto, no hace falta asumir de entrada que todo el CSV está mal o que la lógica de agregación mensual es incorrecta. El problema puede acotarse al punto donde la cadena de amount se convierte en entero.

ObservaciónHecho confirmadoLo que aún no debe suponerse
Tipo de excepciónValueErrorNo concluir que todo el archivo está dañado
Valor que falla'1,450'No asumir que todas las demás filas también están mal
Operación que fallaConversión con int()No concluir que la fórmula de agregación sea incorrecta
Alcance de la correcciónPriorizar el punto donde se analiza amountNo reescribir todo el programa

Al pedir ayuda a Claude Code, proporciona también el mensaje de error, el comando de reproducción y las condiciones de entrada que provocaron el problema. Así puedes comprobar si la explicación de la causa está conectada con evidencia real y reducir de nuevo el alcance si se propone una modificación grande que no tiene relación con el fallo.

03Pedir primero una explicación de la causa y después solo el cambio mínimo

Los requisitos de esta corrección son simples. Si una cadena numérica contiene comas, se eliminan antes de convertirla en entero; si aun así no es un número, debe producirse un error claro que indique en qué fila y con qué valor ocurrió el fallo. La forma de agregación mensual y el formato de salida no cambian.

Instrucción
Al ejecutar python summarize_buggy.py expenses_bad.csv aparece el siguiente error.
ValueError: invalid literal for int() with base 10: '1,450'

Explica primero la causa.
Después, modifica solo lo mínimo en la parte que convierte amount.
Requisitos:
- Si una cadena numérica contiene comas, elimínalas antes de convertirla en entero
- Si aun así no es un número, genera un ValueError claro que incluya el número de fila y el valor original
- Mantén sin cambios la agregación mensual y el formato de salida
- Usa solo la biblioteca estándar de Python
- Después de corregirlo, indica también con qué comando volver a ejecutarlo.

Aquí no pedimos «reescribe todo el código». Como el punto de fallo ya se ha acotado a la conversión de amount, limitamos el cambio a esa parte. Si la IA intenta modificar otros archivos o las reglas de agregación, pídele primero que explique por qué sería necesario y, si no hay una justificación, vuelve al alcance original.

04Reunir la eliminación de comas y el error con número de fila en una función

La corrección siguiente separa el análisis de amount en parse_amount(). Primero elimina las comas e intenta aplicar int(); si falla, vuelve a lanzar un ValueError que incluye el número de fila de entrada y la cadena original. Como la cabecera de csv.DictReader ocupa la fila 1, los números de las filas de datos se ajustan con enumerate(reader, start=2).

Instrucción
import csv
import sys
from collections import defaultdict

def parse_amount(text, line_number):
    cleaned = text.replace(",", "")
    try:
        return int(cleaned)
    except ValueError as exc:
        raise ValueError(
            f"line {line_number}: amount must be an integer, got {text!r}"
        ) from exc

path = sys.argv[1]
monthly = defaultdict(int)

with open(path, encoding="utf-8", newline="") as f:
    reader = csv.DictReader(f)
    for line_number, row in enumerate(reader, start=2):
        month = row["date"][:7]
        monthly[month] += parse_amount(row["amount"], line_number)

for month in sorted(monthly):
    print(f"{month} = {monthly[month]}")

Esta corrección no pretende ser un analizador general capaz de tratar todos los formatos monetarios, como símbolos de moneda, decimales o negativos entre paréntesis. Solo resuelve el problema de separadores de miles que se reprodujo realmente en este ejemplo. Si quieres ampliar las reglas de entrada, conviene definir primero qué formatos se permitirán y añadirlos como requisitos separados.

05Volver a ejecutar con el mismo archivo y comparar con los valores esperados originales

Después de corregirlo, vuelve a ejecutar con el mismo archivo que provocó el problema. Al ejecutar realmente el código corregido anterior con `expenses_bad.csv` en la herramienta Python del chat de GPT, los totales mensuales fueron 2026-09 = 26600 y 2026-10 = 9800. Coinciden exactamente con los valores esperados definidos desde el principio de la serie.

Instrucción
python summarize_fixed.py expenses_bad.csv

2026-09 = 26600
2026-10 = 9800

No basta con comprobar que el error haya desaparecido. La clave de la reejecución es verificar numéricamente que tanto 1450 sin coma como "1,450" con coma se interpreten como la misma cantidad y que el resultado correcto anterior se mantenga.

06Hacer fallar los valores no numéricos indicando su ubicación, en vez de ignorarlos

Añadir la eliminación de comas no significa que debamos convertir valores inválidos en 0 o ignorarlos. Por ejemplo, si el amount de la fila 3 es abc, el programa debe fallar para que el error de datos no quede oculto. El mismo código corregido se ejecutó realmente con otra entrada ficticia y se confirmó un ValueError que incluye `line 3` y el valor original 'abc'.

Instrucción
date,category,amount
2026-09-01,food,12000
2026-09-03,transport,abc
Instrucción
ValueError: line 3: amount must be an integer, got 'abc'
  • Comprobar primero que el error se reproduce con la misma entrada.
  • Leer el tipo de excepción y el valor que falla para reducir el alcance de la corrección.
  • Pedir a la IA que explique la causa y después solicitar solo el cambio mínimo.
  • Volver a ejecutar con la entrada que causó el problema y comparar con los valores esperados originales.
  • No ignorar silenciosamente las entradas inválidas; dejar un error que permita localizarlas.

Qué comprobar por tu cuenta

Código Python ejecutado realmente con la herramienta Python del chat de GPT · Solo se usó un CSV ficticio · Claude Code no se ejecutó realmente

  • Comprobar que el código existente int(row['amount']) reproduce realmente un ValueError con la entrada '1,450'
  • Comprobar que la cadena de la excepción coincida exactamente con "invalid literal for int() with base 10: '1,450'"
  • Comprobar que el código corregido se ejecute sin excepciones con expenses_bad.csv
  • Comprobar que, después de la corrección, stdout sea exactamente 2026-09 = 26600 y 2026-10 = 9800
  • Comprobar que con la entrada amount=abc se produzca realmente el ValueError "line 3: amount must be an integer, got 'abc'"
  • Comprobar que se haya usado únicamente la biblioteca estándar de Python
Límites de la verificación

La verificación de ejecución de Python se realizó con la herramienta Python del chat de GPT y no se afirma que se haya probado en Claude Code. El analizador del ejemplo solo trata comas como separadores de miles; no se generaliza a símbolos de moneda, decimales ni formatos numéricos regionales.