unsupported operand type(s) for +: 'int' and 'str'

Python Erreur courante

Explication

L'erreur `TypeError: unsupported operand type(s) for +: 'int' and 'str'` apparaît quand vous combinez un **entier (`int`)** et une **chaîne (`str`)** avec un opérateur comme `+`. Python refuse de deviner si vous voulez faire une addition (`3 + 4`) ou une concaténation (`"a" + "b"`) : il faut que les deux opérandes soient du même type. Le cas classique : une saisie `input()`, qui renvoie **toujours** une chaîne, additionnée à un nombre. ```python age = input("Votre âge : ") # input() renvoie toujours une str print(age + 1) # "25" + 1 # TypeError: can only concatenate str (not "int") to str ```

Causes courantes

- **`input()` renvoie une `str`** : `"25" + 1` échoue. - **Concaténer un nombre à du texte** : `"Total : " + 42`. - **Données lues d'un fichier, d'un CSV ou d'un JSON** récupérées comme texte alors que vous les croyez numériques. - **Une colonne de DataFrame** au mauvais `dtype` (`object` au lieu de `int`).

1. Convertissez explicitement le type

Pour une addition, convertissez la chaîne en nombre avec int() ou float() :

age = input("Votre âge : ")
print(int(age) + 1)   # ✅ 26

Pour insérer un nombre dans du texte, convertissez-le en chaîne — ou, mieux, utilisez une f-string :

total = 42
print("Total : " + str(total))   # ✅ concaténation explicite
print(f"Total : {total}")          # ✅ f-string (recommandé)

2. Validez la saisie utilisateur

saisie = input("Votre âge : ")
try:
    age = int(saisie)
except ValueError:
    print("Veuillez entrer un nombre entier valide.")

3. En production : convertissez à la frontière

Convertissez les données dès leur entrée (lecture de requête, de fichier, d'environnement) pour que le reste du code manipule de vrais nombres :

import os
timeout = int(os.environ.get("TIMEOUT", "30"))   # str -> int une seule fois

Comment prevenir cette erreur

- **Privilégiez les f-strings** (`f"{x}"`) pour mêler nombres et texte : la conversion est automatique et lisible. - **Convertissez les `input()`** dès leur lecture : `int(input(...))`. - **Annotez et vérifiez** avec `mypy` : il repère `str + int`. - En cas de doute, inspectez le type avec `type(x)` ou `isinstance(x, int)`. - 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 `input()` provoque-t-il cette erreur ?
Parce que `input()` renvoie toujours une chaîne, même si l'utilisateur tape un nombre. `"25" + 1` mélange une `str` et un `int`. Convertissez avec `int(input(...))`.
Comment afficher un nombre dans une phrase sans erreur ?
Utilisez une f-string : `f"Total : {total}"`. C'est plus lisible que `"Total : " + str(total)` et la conversion en texte est automatique.
La même erreur peut-elle venir d'autres opérateurs que `+` ?
Oui : `-`, `*`, `/` ou les comparaisons peuvent lever un `TypeError` similaire dès que vous mélangez des types incompatibles. La solution est la même : aligner les types avant l'opération.

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.