Erreur Python : AttributeError
NSI Première
Définition
L'AttributeError signale que tu essaies d'utiliser un *attribut* ou une *méthode* qui n'existe pas pour l'objet manipulé. Python affiche typiquement `AttributeError: 'list' object has no attribute 'append_item'` : ici la liste ne possède pas de méthode `append_item`. Les causes les plus fréquentes sont une faute de frappe dans le nom de la méthode, l'appel d'une méthode sur le mauvais type d'objet (par exemple une méthode de chaîne sur un entier), ou l'utilisation d'un objet valant `None`.
Exemple corrigé
Énoncé
Voici un code qui déclenche cette erreur :
```python
notes = [12, 15, 9, 18]
notes.add(20) # on veut ajouter une note
print(notes)
```
À l'exécution, Python s'arrête avec :
```
AttributeError: 'list' object has no attribute 'add'
```
Solution
La cause est une confusion de méthode : `add` existe pour les ensembles (`set`), mais pour une liste la méthode qui ajoute un élément à la fin s'appelle `append`. Comme `notes` est une liste, l'attribut `add` n'existe pas, d'où l'AttributeError.
Code corrigé :
```python
notes = [12, 15, 9, 18]
notes.append(20) # méthode correcte pour une liste
print(notes) # [12, 15, 9, 18, 20]
```
Le bon réflexe : lis le message, identifie le type de l'objet (`'list' object`) puis vérifie dans la documentation que la méthode existe bien pour ce type.
Erreurs classiques
- Confondre les méthodes selon le type : `append` (liste) vs `add` (set) vs `update` (dictionnaire) font des choses proches mais ne sont pas interchangeables.
- Appeler une méthode sur un objet qui vaut `None` : par exemple `x = ma_liste.sort()` renvoie `None`, et `x.append(...)` donne `AttributeError: 'NoneType' object has no attribute 'append'`.
- Une simple faute de frappe ou de casse (`.uppercase()` au lieu de `.upper()`) suffit à provoquer l'erreur, car Python distingue majuscules et minuscules.