Le bug que j’ai rencontré quand j’ai oublié un return en Python
- 24 août 2025
- Programmation python
Je suis déjà tombé sur un bug sournois en Python : ma fonction retournait None alors que j’attendais une valeur.
La cause ? J’avais tout simplement oublié le mot-clé return.
Voici un exemple simplifié qui illustre le problème :
1def get_data():
2 # Devait retourner une liste
3 [1, 2, 3] # Oups ! 'return' oublié ici
​
Pourquoi les fonctions Python retournent None
À première vue, on pourrait penser que get_data() renvoie [1, 2, 3]. En réalité, la fonction retourne None! Pourquoi?
- En Python, pas de
return,returnseul etreturn Nonesont équivalents — tous renvoientNone. - Écrire une expression seule (comme
[1, 2, 3]) ne fait rien avec sa valeur : elle est évaluée puis ignorée.
Ce comportement paraît évident une fois qu’on le connaît, mais il est facile de se tromper, surtout si vous utilisez aussi des langages comme Rust, où la dernière expression d’une fonction est renvoyée automatiquement.
Cette habitude peut facilement causer ce genre de bug en Python.
Les fonctions peuvent avoir plusieurs points de retour :
1def example(x):
2 if x > 0:
3 return x
4 else:
5 return -x
Python s’arrête dès qu’il rencontre un return lors de l’exécution.
Si un chemin d’exécution atteint la fin de la fonction sans rencontrer de return, Python retourne None :
1def maybe_return(x):
2 if x > 0:
3 return x
4 # pas de else et pas de return à la fin
5
6print(maybe_return(5)) # affiche 5
7print(maybe_return(-1)) # affiche None
Cela peut provoquer des bugs si votre code s’attend à une valeur non-None mais reçoit None de manière inattendue.
Tip
​
Leçons à retenir
- Toujours utiliser
returnexplicitement lorsque vous voulez renvoyer une valeur. - Rappelez-vous qu’une fonction Python retourne
Nonepar défaut si vous oubliezreturn— pas dereturn,returnseul oureturn Nonesignifient tous la même chose. - Si vous utilisez Rust ou des langages similaires, souvenez-vous que Python ne renverra pas automatiquement la dernière expression.
- Pensez à ajouter des annotations de type et à utiliser des outils d’analyse statique (comme
ty). J’ai listé plus d’options dans mon article Ressources d’apprentissage Python, utiles pour détecter lesreturnmanquants.
1def maybe_return(x: int) -> int | None:
2 if x > 0:
3 return x
4 # pas de return si x <= 0
- Écrivez des tests unitaires couvrant toutes les branches pour détecter rapidement les valeurs
Noneinattendues.
Avec ces conseils, vous devriez éviter l’erreur minime mais sournoise d’une fonction Python qui retourne None parce que vous avez oublié return !
Bulletin d'information
Abonnez-vous à notre bulletin d'information et restez informé(e).