Python "in" не проверяет тип?

>>> 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 и сравнивать тип?

14
задан Martin Flucka 19 December 2011 в 11:13
поделиться