>>> False in [0]
True
>>> type(False) == type(0)
False
La razón me encontré con este:Python "in" no verifica el tipo?
Para mi unidad de pruebas que crea listas de valores de ejemplo válidos y no válidos para cada uno de mis tipos. (con 'mis tipos' quiero decir, no son 100% iguales a los tipos de python) Así que quiero iterar la lista de todos los valores y esperar que pasen si están en mis valores válidos, y por otro lado, fallar si no lo son que no funciona tan bien ahora:
>>> valid_values = [-1, 0, 1, 2, 3]
>>> invalid_values = [True, False, "foo"]
>>> for value in valid_values + invalid_values:
... if value in valid_values:
... print 'valid value:', value
...
valid value: -1
valid value: 0
valid value: 1
valid value: 2
valid value: 3
valid value: True
valid value: False
Por supuesto estoy de acuerdo con los dos últimos valores válidos ''.
¿Esto significa que realmente tengo que iterar a través de mis valid_values y comparar el tipo?
+1 Hmm, nunca pensé que el 'en' de python no buscaba el tipo. Muy interesante . . . – OnesimusUnbound
@BenJames, hmm, me pregunto cómo sería romper el pato escribiendo en Python? – OnesimusUnbound