
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
,return
seul etreturn None
sont é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
return
explicitement lorsque vous voulez renvoyer une valeur. - Rappelez-vous qu’une fonction Python retourne
None
par défaut si vous oubliezreturn
— pas dereturn
,return
seul oureturn None
signifient 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 lesreturn
manquants.
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
None
inattendues.
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).