Prompt Claude pour déboguer Python : diagnostic précis et correction rapide
Ce prompt Claude analyse vos erreurs Python en profondeur, identifie la cause racine et propose une correction expliquée avec tests de non-régression.
Déboguer du Python avec un LLM généraliste donne souvent des réponses vagues : “essayez d’ajouter un try-except”. Claude excelle dans le raisonnement en chaîne, ce qui en fait un outil redoutable pour le débogage structuré. Ce prompt exploite cette capacité en forçant une analyse méthodique : reproduction mentale du bug, identification de la cause racine, correction commentée et test de non-régression. Vous obtenez un diagnostic précis, pas un pansement.
Le prompt
You are an expert Python developer specializing in debugging and code quality. I need you to diagnose and fix a Python error using rigorous analysis.
**Python version**: [PYTHON_VERSION]
**Libraries involved**: [LIBRARIES_AND_VERSIONS]
**Error / Traceback**:
[PASTE_FULL_TRACEBACK]
**Code causing the issue**:
[PASTE_RELEVANT_CODE]
**What I expect**: [EXPECTED_BEHAVIOR]
**What actually happens**: [ACTUAL_BEHAVIOR]
**What I already tried**: [PREVIOUS_ATTEMPTS_OR_NONE]
Follow this structured debugging process:
1. **Mental execution** — Walk through the code line by line as Python would execute it. Identify exactly where and why the failure occurs.
2. **Root cause** — State the root cause in one sentence. Distinguish between the symptom (the error message) and the actual problem (the logic or data flaw).
3. **Fix** — Provide the corrected code. Mark every change with an inline comment explaining why.
4. **Regression test** — Write a minimal pytest test that would have caught this bug before it reached production.
5. **Related pitfalls** — List 1-2 common Python pitfalls related to this bug that I should watch for in the rest of my codebase.
Be precise. Do not repeat unchanged code. Focus on the delta.
Comment utiliser ce prompt
- Copiez le prompt ci-dessus
- Remplacez les variables :
[PYTHON_VERSION]: ex. “3.11” ou “3.12”[LIBRARIES_AND_VERSIONS]: ex. “pandas 2.2, sqlalchemy 2.0”[PASTE_FULL_TRACEBACK]: le traceback complet depuisTraceback (most recent call last):[PASTE_RELEVANT_CODE]: le code minimal qui reproduit le problème[EXPECTED_BEHAVIOR]: ce que le code devrait faire[ACTUAL_BEHAVIOR]: ce qui se passe réellement[PREVIOUS_ATTEMPTS_OR_NONE]: vos tentatives précédentes ou “aucune”
- Collez dans Claude (claude.ai ou API)
- Appliquez la correction et lancez le test de régression fourni
Exemple de résultat
Entrée
Python version: 3.12
Libraries: pandas 2.2, numpy 1.26
Error / Traceback:
KeyError: 'revenue'
File "analysis.py", line 18, in calculate_growth
current = df['revenue'].sum()
Code causing the issue:
def calculate_growth(filepath: str) -> float:
df = pd.read_csv(filepath)
current = df['revenue'].sum()
previous = df['revenue_prev'].sum()
return (current - previous) / previous * 100
What I expect: Return the revenue growth percentage
What actually happens: KeyError on 'revenue' column
What I already tried: Checked the CSV file — the column exists when I open it in Excel
Sortie
Exécution mentale : pd.read_csv(filepath) lit le fichier. La ligne 18 accède à df['revenue']. Le KeyError indique que cette colonne n’existe pas dans le DataFrame chargé, malgré sa présence visuelle dans Excel.
Cause racine : Le fichier CSV utilise un séparateur différent du séparateur par défaut (,). Les fichiers générés par Excel en France utilisent souvent ; comme séparateur. Résultat : pandas charge toute la ligne comme une seule colonne au lieu de séparer les champs.
Correction :
def calculate_growth(filepath: str) -> float:
# Added: detect separator automatically with Python's csv.Sniffer
df = pd.read_csv(filepath, sep=None, engine='python')
current = df['revenue'].sum()
previous = df['revenue_prev'].sum()
if previous == 0: # Added: guard against division by zero
raise ValueError("Previous revenue is zero, cannot calculate growth rate")
return (current - previous) / previous * 100
Test de régression :
import pytest
import pandas as pd
from io import StringIO
from unittest.mock import patch
def test_calculate_growth_semicolon_csv(tmp_path):
csv_content = "revenue;revenue_prev\n1000;800\n2000;1500"
csv_file = tmp_path / "test.csv"
csv_file.write_text(csv_content)
result = calculate_growth(str(csv_file))
assert result == pytest.approx(30.43, rel=0.01)
Pièges liés : Les fichiers CSV exportés depuis Excel varient selon la locale (; en France, , aux US). Utilisez toujours sep=None, engine='python' ou validez les colonnes avec assert set(expected_cols).issubset(df.columns) après le chargement.
Pourquoi ce prompt fonctionne
L’exécution mentale ligne par ligne oblige Claude à simuler le runtime Python avant de proposer un correctif. Cette étape élimine les réponses réflexes du type “ajoutez un try-except” et force le modèle à comprendre le flux de données réel.
La distinction symptôme/cause racine est clé. Le KeyError est le symptôme ; le vrai problème est le séparateur CSV. Sans cette contrainte explicite, un LLM traite souvent le symptôme (vérifier si la colonne existe) au lieu de la cause (pourquoi elle n’existe pas).
Le test de régression intégré transforme chaque session de débogage en amélioration permanente de votre codebase. Claude génère un test ciblé que vous pouvez ajouter directement à votre suite pytest.
Variantes
Pour les erreurs async/await
You are an expert Python developer specializing in asyncio and concurrent programming.
**Python version**: [PYTHON_VERSION]
**Async framework**: [ASYNCIO / AIOHTTP / FASTAPI / CELERY]
**Error**:
[PASTE_ERROR]
**Async code**:
[PASTE_CODE]
**Context**: [NUMBER_OF_CONCURRENT_TASKS / EVENT_LOOP_SETUP]
Trace the execution flow across coroutines. Identify race conditions, missing awaits, or event loop conflicts. Provide the fix with an explanation of the concurrency issue.
Pour les erreurs de types et mypy
You are a Python type system expert. I'm getting a type error that I cannot resolve.
**Python version**: [VERSION]
**Type checker**: [MYPY / PYRIGHT / PYLANCE] version [VERSION]
**Error**:
[PASTE_TYPE_ERROR]
**Code**:
[PASTE_CODE]
**Type stubs installed**: [YES/NO — WHICH ONES]
Explain the type mismatch in plain terms. Provide the fix using proper type annotations (no `# type: ignore` unless truly necessary). If the type checker is wrong, explain why and show the minimal override.
Conseils pour de meilleurs résultats
- Incluez le traceback complet. La dernière ligne seule ne suffit pas. Les appels intermédiaires révèlent le contexte d’exécution qui aide Claude à diagnostiquer le problème.
- Précisez les versions de vos bibliothèques. Le comportement de pandas, SQLAlchemy ou FastAPI change entre les versions majeures.
pip freeze | grep [lib]donne l’info en une commande. - Fournissez un cas reproductible minimal. Réduisez votre code au plus petit snippet qui déclenche l’erreur. Moins de bruit = diagnostic plus précis.