Les développeurs débutants rencontrent souvent ce code dans les instructions conditionnelles :
if value:
print("Il y a une valeur!")
Au début, il est facile de se demander ce que teste cette simple instruction if value:.
Particulièrement les deux suivants :
None""(chaîne vide)
Les deux évaluent False, ce qui peut les faire sembler semblables.
Mais est-ce vraiment le cas ?
Valeurs Falsy
En Python, les valeurs suivantes évaluent à False dans une instruction conditionnelle :
NoneFalse0,0.0""(chaîne vide)[](liste vide){}(dictionnaire vide)set(),()et autres collections vides
C'est-à-dire que if not value: attrape toutes ces valeurs en même temps.
None et "" sont différents
Ils ont des apparences différentes et comportent différemment.
value1 = None
value2 = ""
print(value1 == value2) # False
print(value1 is value2) # False
print(bool(value1)) # False
print(bool(value2)) # False
==compare les valeurs, tandis queiscompare l'identité.Noneest un objet spécial signifiant « aucune valeur pour le moment »,- et
""est une chaîne qui est vide.

Dans l'image ci-dessus, l'homme à gauche tient une bulle de dialogue mais ne dit rien, correspondant à la chaîne vide "".
La femme à droite n'a même pas de bulle de dialogue — c'est None.
Les deux évaluent à False dans les conditions suivantes :
male_voice = ""
female_voice = None
if not male_voice and not female_voice:
print("Ils ne parlent pas tous les deux !") # both are False
Alors, comment les différencier dans la pratique ?
Prenons l'exemple du traitement des entrées utilisateur :
username = user_input.get("username", None)
- Si l'utilisateur n'a rien saisi →
None - Si l'utilisateur a saisi une chaîne vide →
""
Souhaitez-vous les traiter différemment ?
if username is None:
print("Aucune saisie !")
elif username == "":
print("Vous avez saisi une chaîne vide.")
else:
print("Valeur saisie :", username)
Erreurs courantes en pratique
Le code suivant filtre parfois toutes les valeurs Falsy involontairement :
if not username:
print("Pas de saisie")
Cependant, cette condition inclut non seulement des chaînes vides mais aussi None, 0, et des listes vides.
Par conséquent, il est crucial d'être précis dans son intention :
- Accepter une chaîne même si elle est vide →
if username is None: - La chaîne doit être présente mais peut être vide →
if username != "": - Il ne doit pas y avoir de valeur →
if not username:
En résumé
None et "" ne sont pas identiques. Pourtant, tous deux ressemblent à False.
Connaître cette différence aidera à rendre vos intentions de code plus claires et sans bug.
Dans le prochain article, nous explorerons d'autres valeurs Falsy telles que 0, [], {} et examinerons plus en profondeur les différences entre is et == !
Aucun commentaire.