On 3 April 2018 at 20:34, Ethan Furman firstname.lastname@example.org wrote:
This behavior was recently brought to my attention :
--> 1 in 'hello' Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'in <string>' requires string as left operand, not int
However, in any other collection (set, dict, list, tuple, etc), the answer would be False.
Does anyone remember the reason why an exception is raised in the string instance instead of returning False?
The comparison doesn't seem to me to be valid: the 'in' operator for all of those other collections tests whether an element is a member of a collection, whereas for a string it tests whether a string is a substring of another string.
In the first case, arbitrary objects can be members, but e.g.
[2, 3, 4] in [1, 2, 3, 4, 5]
is False. In the second case, no non-string can ever be 'in' a string, but
'bcd' in 'abcde'
is True. It's kinda-sorta like addition for numerics versus sequences; they do different things.