>>> False in [0]
True
>>> type(False) == type(0)
False
Причина, по которой я наткнулся на это:
Для моего юнит-тестирования я создал списки допустимых и недопустимых примеров значений для каждого из моих типов. (под "моими типами" я подразумеваю, что они не на 100% совпадают с типами python). Поэтому я хочу итерировать список всех значений и ожидать, что они пройдут, если они находятся в моих допустимых значениях, и, с другой стороны, провалятся, если нет. Сейчас это работает не очень хорошо:
>>> 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
Конечно, я не согласен с двумя последними "допустимыми" значениями.
Значит ли это, что я действительно должен перебирать все мои valid_values и сравнивать тип?