object of type 'NoneType' has no len()
Python
Erreur courante
Explication
L'erreur `TypeError: object of type 'NoneType' has no len()` survient quand vous appelez `len()` sur une valeur qui vaut `None`. `None` n'a pas de longueur : seuls les objets « dimensionnables » (chaînes, listes, tuples, dictionnaires, ensembles) répondent à `len()`.
```python
items = config.get("items") # la clé est absente → None
print(len(items))
# TypeError: object of type 'NoneType' has no len()
```
Causes courantes
- **`len()` appelé sur le retour `None`** d'une fonction ou d'un `dict.get()`. - **Une variable réassignée à `None`** avant l'appel à `len()`. - **Une méthode en place** : `taille = ma_liste.sort()` met `taille` à `None`. - **Une requête ou un parsing** qui renvoie `None` plutôt qu'une collection vide.
1. Repliez-vous sur une collection vide
items = config.get("items") or []
print(len(items)) # 0 si la clé est absente
2. Vérifiez avant d'appeler len()
items = config.get("items")
if items is not None:
print(len(items))
3. Garantissez une valeur dimensionnable à la source
Une fonction qui « renvoie une liste » devrait toujours renvoyer une liste, même vide :
def charger_items():
items = requete() # peut renvoyer None
return items or [] # ✅ jamais None
Comment prevenir cette erreur
- **Convention** : renvoyez `[]`, `""` ou `{}` plutôt que `None` pour « rien ».
- **Annotez** `-> list[str]` et laissez `mypy` repérer les retours `None`.
- Pour tester si une collection est vide, `if not items:` suffit (et gère aussi le cas `None` sans lever d'erreur).
Besoin d'aide sur votre projet ?
Besoin d'aide sur un probleme technique ? Decrivez-le pour des recommandations.
Nous contacterQuestions frequentes
Comment compter en toute sécurité une valeur qui peut être `None` ?
Utilisez `len(valeur or [])`, qui renvoie `0` si la valeur est `None`. Ou testez d'abord `if valeur is not None:`.
`if not ma_variable:` est-il équivalent à `len(ma_variable) == 0` ?
Presque : `if not x:` est vrai pour `None`, `[]`, `""`, `0` et `{}`. Si vous voulez distinguer « vide » de « None », testez explicitement `if x is None:` puis `if len(x) == 0:`.