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 :
None
False
0
,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 queis
compare l'identité.None
est 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 ==
!
Add a New Comment