could not convert string to float
Python
Erreur courante
Explication
L'erreur `ValueError: could not convert string to float: '...'` survient quand vous passez à `float()` une chaîne qui ne représente **pas un nombre décimal valide**. En France, la cause la plus fréquente est la **virgule décimale** : `float("12,50")` échoue car Python attend un **point** (`12.50`).
```python
prix = float("12,50") # virgule au lieu de point
# ValueError: could not convert string to float: '12,50'
```
Causes courantes
- **Virgule décimale** (notation française) au lieu d'un point. - **Espaces, symboles ou unités** dans la chaîne (`"12 €"`, `"3.5 kg"`). - **Séparateur de milliers** (`"1 000.50"`, `"1,000.50"`). - **Chaîne vide** ou valeur manquante (`""`, `"N/A"`). - **Texte non numérique**.
1. Remplacez la virgule par un point
saisie = "12,50"
prix = float(saisie.replace(",", ".")) # ✅ 12.5
2. Nettoyez la chaîne avant conversion
brut = " 1 234,50 € "
nettoye = brut.strip().replace(" ", "").replace(" ", "").replace("€", "").replace(",", ".")
prix = float(nettoye) # ✅ 1234.5
3. Encadrez avec try / except
try:
prix = float(saisie.replace(",", "."))
except ValueError:
prix = 0.0 # ou redemander la saisie
4. Pour de l'argent, utilisez Decimal
Les flottants arrondissent mal les montants ; Decimal est plus sûr en comptabilité :
from decimal import Decimal
montant = Decimal("12.50")
Comment prevenir cette erreur
- **Normalisez les saisies françaises** : remplacez systématiquement `,` par `.` avant `float()`.
- **Retirez espaces, symboles et séparateurs de milliers** (attention à l'espace insécable ` `).
- **Encadrez** toute conversion de données externes par `try/except ValueError`.
- Référence : [docs.python.org — float()](https://docs.python.org/fr/3/library/functions.html#float).
Besoin d'aide sur votre projet ?
Besoin d'aide sur un probleme technique ? Decrivez-le pour des recommandations.
Nous contacterQuestions frequentes
Pourquoi `float("12,50")` échoue-t-il alors que `12,50` est un nombre en France ?
Parce que Python suit la convention anglo-saxonne : le séparateur décimal est le **point**. Remplacez la virgule avant la conversion : `float("12,50".replace(",", "."))`.
Comment gérer un fichier d'export avec des nombres à la française ?
Pré-traitez chaque valeur (`.replace(" ", "").replace(",", ".")`) ou, avec pandas, utilisez `pd.read_csv(..., decimal=",", thousands=" ")` pour que la conversion soit automatique.