'dict' object has no attribute 'has_key'
Python
Erreur courante
Explication
L'erreur `AttributeError: 'dict' object has no attribute 'has_key'` survient parce que la méthode `has_key()` existait en **Python 2** mais a été **supprimée en Python 3**. Pour tester la présence d'une clé, on utilise désormais l'opérateur `in`.
```python
d = {"a": 1}
if d.has_key("a"): # has_key n'existe plus en Python 3
print("présent")
# AttributeError: 'dict' object has no attribute 'has_key'
```
Causes courantes
- **Du code Python 2** exécuté avec Python 3. - **Un vieux tutoriel** ou un copier-coller daté.
1. Utilisez l'opérateur in
if "a" in d: # ✅ remplace d.has_key("a")
print("présent")
2. Pour l'absence, not in
if "b" not in d:
d["b"] = 0
3. Migrez le code Python 2
L'outil 2to3 convertit automatiquement ce type de syntaxe :
2to3 -w mon_script.py
Comment prevenir cette erreur
- **Testez l'appartenance avec `in`** (`cle in dict`), idiomatique et rapide.
- **Vérifiez que vos sources ciblent Python 3** (Python 2 est en fin de vie depuis 2020).
- Référence : [docs.python.org — dict](https://docs.python.org/fr/3/library/stdtypes.html#dict).
Besoin d'aide sur votre projet ?
Besoin d'aide sur un probleme technique ? Decrivez-le pour des recommandations.
Nous contacterQuestions frequentes
`in` est-il aussi rapide que l'ancien `has_key` ?
Oui, et même plus : `cle in dict` est une recherche par hachage en temps constant, l'idiome recommandé en Python 3.
Comment récupérer une valeur sans risque si la clé peut manquer ?
Utilisez `dict.get(cle)` (renvoie `None`) ou `dict.get(cle, defaut)` plutôt que de tester puis d'accéder.