On Mon, Jun 9, 2014 at 9:34 AM, Roy Smith <r...@panix.com> wrote:
> We noticed recently that:
>>>> None in 'foo'
> raises (at least in Python 2.7)
> TypeError: 'in <string>' requires string as left operand, not NoneType
> This is surprising.  The description of the 'in' operatator is, 'True if an 
> item of s is equal to x, else False '.  From that, I would assume it behaves 
> as if it were written:
> for item in iterable:
>     if item == x:
>         return True
> else:
>     return False
> why the extra type check for str.__contains__()?  That seems very unpythonic. 
>  Duck typing, and all that.

I guess for the same reason that you get a TypeError if you test
whether the number 4 is in a string: it can't ever be, so it's a
nonsensical comparison.  It could return False, but the comparison is
more likely to be symptomatic of a bug in the code than intentional,
so it makes some noise instead.

Reply via email to