invalid literal for int() with base 10

Python Erreur courante

Explication

L'erreur `ValueError: invalid literal for int() with base 10` survient quand vous passez à `int()` une chaîne qui ne représente **pas un entier décimal valide** : du texte, un nombre à virgule, une chaîne vide ou contenant des espaces/symboles. ```python int("42") # ✅ 42 int("3.14") # ❌ contient un point int("12 ") # ❌ espace... en réalité ok (int() retire les espaces), mais int("abc") # ❌ int("") # ❌ chaîne vide # ValueError: invalid literal for int() with base 10: 'abc' ```

Causes courantes

- **Une chaîne décimale invalide** : lettres, symboles, chaîne vide. - **Un nombre à virgule** passé à `int()` : `int("3.14")` échoue (il faut `float` d'abord). - **Une saisie utilisateur non validée**. - **Une cellule CSV** contenant un en-tête ou une valeur manquante (`"N/A"`, `""`). - **Un séparateur de milliers** : `int("1,000")`.

1. Validez avant de convertir

saisie = input("Quantité : ").strip()
if saisie.isdigit():
    qte = int(saisie)
else:
    print("Entrez un entier positif valide.")

2. Encadrez avec try / except

La méthode la plus robuste, car .isdigit() ne gère ni le signe - ni les nombres négatifs :

try:
    qte = int(saisie)
except ValueError:
    qte = 0   # ou redemander la saisie

3. Pour un nombre à virgule, passez par float

int("3.14")          # ❌ ValueError
int(float("3.14"))   # ✅ 3 (tronque)
round(float("3.14")) # ✅ 3 (arrondit)

4. En production : nettoyez les données

Pour des fichiers CSV ou des exports, retirez les séparateurs et gérez les valeurs manquantes avant la conversion :

brut = "1 234"
qte = int(brut.replace(" ", "").replace(" ", "") or 0)

Comment prevenir cette erreur

- **Validez ou encadrez** toute conversion de données externes (`try/except ValueError`). - **Pour les nombres décimaux**, utilisez `float()` ; n'attendez pas que `int()` les accepte. - **Nettoyez** les chaînes (`strip()`, suppression des séparateurs) avant conversion. - Référence : [docs.python.org — int()](https://docs.python.org/fr/3/library/functions.html#int).

Besoin d'aide sur votre projet ?

Besoin d'aide sur un probleme technique ? Decrivez-le pour des recommandations.

Nous contacter

Questions frequentes

Pourquoi `int("3.14")` échoue-t-il alors que c'est un nombre ?
Parce que `int()` n'accepte que des entiers en notation décimale, pas les nombres à virgule. Convertissez d'abord en `float` : `int(float("3.14"))`, qui tronque à `3`.
`str.isdigit()` suffit-il pour valider une saisie ?
Pas toujours : `isdigit()` renvoie `False` pour les nombres négatifs (`"-5"`) et les espaces. Pour une validation complète, préférez un bloc `try/except ValueError` autour de `int()`.
Comment convertir "1 000" (avec séparateur de milliers) en entier ?
Retirez d'abord les séparateurs : `int("1 000".replace(" ", ""))`. Attention aussi à l'espace insécable ` ` fréquent dans les exports.

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.