'str' object does not support item assignment
Python
Erreur courante
Explication
L'erreur `TypeError: 'str' object does not support item assignment` survient quand vous essayez de **modifier un caractère d'une chaîne par son indice** (`s[0] = "x"`). En Python, les chaînes sont **immuables** : on ne peut pas changer leur contenu en place, il faut créer une nouvelle chaîne.
```python
nom = "alice"
nom[0] = "A" # interdit : les chaînes sont immuables
# TypeError: 'str' object does not support item assignment
```
Causes courantes
- **Tentative de modifier un caractère** d'une chaîne via son indice. - **Confusion avec les listes** (qui, elles, sont modifiables). - **Réutiliser du code** écrit pour une liste sur une chaîne.
1. Reconstruisez une nouvelle chaîne
nom = "alice"
nom = "A" + nom[1:] # ✅ "Alice"
2. Utilisez str.replace() pour remplacer
phrase = "j'aime le café"
phrase = phrase.replace("café", "thé") # ✅ nouvelle chaîne
3. Passez par une liste si beaucoup de modifications
caracteres = list("alice")
caracteres[0] = "A"
nom = "".join(caracteres) # ✅ "Alice"
4. Capitaliser proprement
nom = "alice".capitalize() # ✅ "Alice"
Comment prevenir cette erreur
- **Souvenez-vous** : les chaînes sont immuables, les listes sont modifiables.
- **Privilégiez les méthodes de chaîne** (`replace`, `upper`, `capitalize`) qui renvoient une nouvelle chaîne.
- Pour de nombreuses transformations caractère par caractère, travaillez sur une `list` puis `"".join(...)`.
- Référence : [docs.python.org — str](https://docs.python.org/fr/3/library/stdtypes.html#text-sequence-type-str).
Besoin d'aide sur votre projet ?
Besoin d'aide sur un probleme technique ? Decrivez-le pour des recommandations.
Nous contacterQuestions frequentes
Pourquoi les chaînes sont-elles immuables en Python ?
Pour des raisons de performance et de sécurité (hashabilité, partage mémoire). Cela garantit qu'une chaîne ne change jamais une fois créée — d'où l'usage de méthodes qui renvoient de **nouvelles** chaînes.
Comment remplacer le caractère à une position précise ?
Reconstruisez par découpage : `s = s[:i] + nouveau + s[i+1:]`. Ou convertissez en liste, modifiez, puis `"".join(...)`.