'str' object has no attribute 'append'
Python
Erreur courante
Explication
L'erreur `AttributeError: 'str' object has no attribute 'append'` signifie que vous appelez une méthode de **liste** (`append`, `extend`, `sort`...) sur une **chaîne de caractères**. Les chaînes sont immuables et n'ont pas ces méthodes : la variable n'est pas du type que vous croyez.
```python
noms = "alice" # c'est une str, pas une liste
noms.append("bob")
# AttributeError: 'str' object has no attribute 'append'
```
Causes courantes
- **La variable est une `str`** alors que vous la pensiez liste. - **Réaffectation** : une liste transformée en chaîne par `", ".join(...)` ou `str(...)`. - **Retour de fonction** d'un type inattendu. - **Donnée lue d'un fichier** : une ligne est une chaîne, pas une liste.
1. Utilisez une vraie liste
noms = ["alice"]
noms.append("bob") # ✅ ["alice", "bob"]
2. Pour agrandir une chaîne, concaténez
Les chaînes n'ont pas d'append ; on les assemble avec += (ou, mieux, on accumule dans une liste puis join) :
texte = "alice"
texte += ", bob" # ✅
parts = ["alice", "bob"]
texte = ", ".join(parts) # ✅ plus efficace pour beaucoup d'éléments
3. Vérifiez le type en cas de doute
print(type(noms)) # <class 'str'> révèle l'erreur
Comment prevenir cette erreur
- **Annotez les types** (`noms: list[str]`) et activez `mypy`.
- **Nommez clairement** vos variables (`liste_noms` vs `nom`).
- Souvenez-vous : `append`, `extend`, `sort` sont des méthodes de **liste** ; `split`, `strip`, `upper` sont des méthodes de **chaîne**.
Besoin d'aide sur votre projet ?
Besoin d'aide sur un probleme technique ? Decrivez-le pour des recommandations.
Nous contacterQuestions frequentes
Comment ajouter un caractère à une chaîne ?
Les chaînes étant immuables, on crée une nouvelle chaîne : `texte += "x"`. Pour beaucoup d'ajouts, accumulez dans une liste puis assemblez avec `"".join(liste)` — c'est nettement plus rapide.
La même erreur existe-t-elle dans l'autre sens ?
Oui : `'list' object has no attribute 'split'` survient quand vous appelez une méthode de chaîne sur une liste. Le principe est identique — vérifiez le type réel de la variable.