Los desarrolladores principiantes a menudo ven este tipo de código en las sentencias condicionales:
if value:
print("¡Hay un valor!")
Al principio, puede ser confuso entender qué está comprobando una simple sentencia como if value:
.
Particularmente con los siguientes dos:
None
""
(cadena vacía)
Ambos se evalúan como False
, lo que puede hacer que parezcan lo mismo.
¿Pero realmente lo son?
Valores Falsy
En Python, los siguientes valores se evalúan como False en la condición:
None
False
0
,0.0
""
(cadena vacía)[]
(lista vacía){}
(diccionario vacío)set()
,()
y otras colecciones vacías
Es decir, if not value:
captura todos estos casos a la vez.
None
y ""
son diferentes
Se ven diferentes y comportan de manera distinta.
value1 = None
value2 = ""
print(value1 == value2) # False
print(value1 is value2) # False
print(bool(value1)) # False
print(bool(value2)) # False
==
es una comparación de valores, mientras queis
es una comparación de identidad.None
es un objeto especial que significa "no hay valor aún",""
es una cadena que está vacía.
En la imagen, el hombre a la izquierda sostiene una burbuja de diálogo pero no dice nada — esto representa la cadena vacía ""
.
La mujer a la derecha no tiene burbuja de diálogo — esto representa None
.
Ambos se evalúan como False
bajo las siguientes condiciones:
male_voice = ""
female_voice = None
if not male_voice and not female_voice:
print("¡Ninguno de los dos habla!") # Se ejecuta porque ambos son False
¿Cómo diferenciarlos en la práctica?
Veamos un ejemplo al procesar la entrada del usuario:
username = user_input.get("username", None)
- Si el usuario no ha ingresado nada →
None
- Si el usuario ha ingresado una cadena vacía →
""
¿Quieres tratarlos de manera diferente?
if username is None:
print("¡No has ingresado nada!")
elif username == "":
print("Has ingresado una cadena vacía.")
else:
print("Valor ingresado:", username)
Errores comunes en la práctica
El siguiente código a veces filtra involuntariamente todos los valores Falsy:
if not username:
print("No hay entrada")
Sin embargo, esta condición incluye no solo cadenas vacías, sino también None
, 0
, listas vacías, etc.
Por lo tanto, es importante ser claro sobre la intención:
- Incluso si está vacío, debe permitir la cadena →
if username is None:
- La cadena debe existir, aunque esté vacía →
if username != "":
- Simplemente no debe haber ningún valor →
if not username:
Resumiendo
None
y ""
no son lo mismo. Sin embargo, ambos funcionan como False
.
Conocer esta diferencia puede hacer que tus intenciones en el código sean más claras y libres de errores.
En el próximo artículo, profundizaremos en otros valores Falsy como 0
, []
, {}
y la diferencia entre is
y ==
!
Add a New Comment