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 contacter

Questions 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.

Erreurs similaires

Chaque semaine, le meilleur de la tech francaise

Tendances, salaires, outils et opportunites — directement dans votre boite mail.

Gratuit. Desabonnement en un clic. Pas de spam.