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.
Contenido revisado 2026.09.22Instrucciones para copiar
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.
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ón
Hecho confirmado
Lo que aún no debe suponerse
Tipo de excepción
ValueError
No 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 falla
Conversión con int()
No concluir que la fórmula de agregación sea incorrecta
Alcance de la corrección
Priorizar el punto donde se analiza amount
No 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.
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'.
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.
Entendemos el vibe coding no como «decírselo con palabras y dejar que la IA lo haga todo», sino como una forma de trabajo en la que la persona define los requisitos y los criterios de comprobación y después revisa el resultado generado por la IA. Con una herramienta ficticia para sumar un CSV de gastos domésticos, organizamos en una sola nota la entrada, la salida, lo que no debe hacerse y cómo verificar el resultado.
Comprobamos el comando de instalación de Claude Code y las condiciones de cuenta según el sistema operativo, y comenzamos la primera sesión en una carpeta ficticia de práctica. En lugar de generar código de inmediato, hacemos solo tres preguntas para leer la carpeta y el CSV en modo plan y después cerramos la sesión de forma segura.
Practicamos el flujo para crear una primera herramienta pequeña en Python usando el expenses.csv ficticio y la nota de requisitos preparados antes. La solicitud incluye un ejemplo de entrada, la salida esperada y las restricciones, y después ejecutamos el summarize.py terminado en la herramienta Python del chat de GPT, no en Claude Code, para comprobar el resultado.
Organizamos de forma breve en el CLAUDE.md del proyecto el comando de ejecución, las reglas de datos, las prohibiciones y la forma de comprobar resultados que antes se repetían en cada solicitud. Distinguimos la función de `/init` para crear un borrador y el propósito de cada ubicación de archivo, y terminamos un archivo de reglas de 35 líneas adaptado al ejemplo del CSV de gastos.
A partir del ejemplo de añadir la opción `--by-category` a una herramienta ya funcional que suma gastos por mes, aprenderás a revisar primero el plan de cambios en el modo plan de Claude Code. Antes de implementar, fijarás el alcance de la modificación y el formato de salida; después de aprobar el plan, ejecutarás el código final para comprobar tanto los totales mensuales existentes como los totales por categoría.
Aprenderás un flujo mínimo para dejar un punto de referencia con git antes de que Claude Code modifique archivos y, después del trabajo, revisar los cambios reales con `git status` y `git diff`. Puedes pedir a la IA que explique el diff, pero el proceso se basa en que una persona compruebe el diff y los resultados de ejecución antes de hacer staging y commit directamente.
Partiendo de que Claude Code puede leer y modificar archivos y ejecutar comandos, este artículo reúne las comprobaciones de seguridad que una persona principiante debe hacer antes, durante y después del trabajo. Conecta en una sola lista las diferencias entre modos de permiso, los cambios que los checkpoints no pueden restaurar, la diferencia de función respecto de git y la regla de no introducir información secreta.