Erreur Python : TypeError

NSI Première

Définition

La `TypeError` signale qu'une opération a été appliquée à un objet d'un type incompatible. Python l'affiche par exemple quand on essaie d'additionner un nombre et une chaîne de caractères, d'appeler quelque chose qui n'est pas une fonction, ou d'utiliser un type non indexable. Le message exact ressemble à `TypeError: can only concatenate str (not "int") to str` ou `TypeError: unsupported operand type(s) for +: 'int' and 'str'`. La cause typique : un `input()` renvoie toujours une chaîne (`str`) qu'on a oublié de convertir en `int`.

Exemple corrigé

Énoncé

Voici un code qui déclenche cette erreur :

```python
age = input("Quel est ton âge ? ")
age_dans_10_ans = age + 10
print("Dans 10 ans tu auras", age_dans_10_ans, "ans")
```

À l'exécution, Python s'arrête sur la deuxième ligne et affiche :

```
TypeError: can only concatenate str (not "int") to str
```

Solution

La cause : la fonction `input()` renvoie toujours une chaîne de caractères (`str`), même si l'utilisateur tape des chiffres. Ici `age` vaut donc `"25"` (du texte) et non `25` (un nombre). Python ne sait pas additionner du texte avec l'entier `10`, d'où la `TypeError`.

Code corrigé :

```python
age = int(input("Quel est ton âge ? "))
age_dans_10_ans = age + 10
print("Dans 10 ans tu auras", age_dans_10_ans, "ans")
```

En entourant `input()` par `int(...)`, on convertit le texte en entier avant le calcul.

Le bon réflexe : dès qu'on veut faire un calcul avec une saisie utilisateur, on convertit la valeur avec `int()` ou `float()`.

Erreurs classiques

  • Croire que `input()` renvoie un nombre : il renvoie toujours une `str`. Il faut convertir avec `int()` ou `float()`.
  • Confondre concaténation et addition : avec deux chaînes, `"2" + "3"` donne `"23"` (texte collé) et non `5`.
  • Appeler une variable comme une fonction : écrire `liste(2)` au lieu de `liste[2]` donne `TypeError: 'list' object is not callable`.

Toutes les notions