>>> False in [0]
True
>>> type(False) == type(0)
False
La ragione per cui mi sono imbattuto in questo:Python "in" non controlla il tipo?
Per la mia unit test ho creato gli elenchi dei valori di esempio validi e non validi per ciascuno dei miei tipi. (con 'i miei tipi' intendo, non sono al 100% uguali ai tipi di python) Quindi voglio ripetere l'elenco di tutti i valori e aspettarmi che passino se sono nei miei valori validi, e d'altra parte, fallire se non lo sono. che non funziona così bene ora:
>>> 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
Naturalmente sono d'accordo con gli ultimi due valori 'validi'.
Ciò significa che devo davvero ripetere i miei valori validi e confrontare il tipo?
+1 Hmm, non ho mai pensato che il 'in' di Python non controlli il tipo. Molto interessante . . . – OnesimusUnbound
@BenJames, hmm, mi chiedo come farebbe a rompere l'anatra digitando in Python? – OnesimusUnbound