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 contacter

Questions 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:`.

Erreurs similaires

Chaque semaine, le meilleur de la tech francaise

Tendances, salaires, outils et opportunites — directement dans votre boite mail.

Gratuit. Desabonnement en un clic. Pas de spam.