<div dir="ltr">I don't think of "in" as an equality test -- it's special just like <, <=, >, >= are special, and those can certainly raise TypeError.<br></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Apr 4, 2018 at 2:07 PM, Ethan Furman <span dir="ltr"><<a href="mailto:ethan@stoneleaf.us" target="_blank">ethan@stoneleaf.us</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">On 04/04/2018 01:24 PM, Glenn Linderman wrote:<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
I think the "in" test should raise TypeError if tested against _anything_ that is not an Enum member.<br>
<br>
Why? I see a parallel between Enum and mappings.<br>
<br>
x = {'test':True, 'live':False}<br>
<br>
So it is True that  'test' in x   and  'live' in x  and False that True in x and False in x.<br>
<br>
It is False that  'foo' in x  and  3 in x<br>
<br>
It is TypeError that [4,5,6] in x, or {'foo': 'bar'} in x.<br>
<br>
Note that it is False that (4,5,6) in x  which is a little surprising given the above two, but not when you realize the<br>
differences between this and the above two.<br>
<br>
So with mappings, you can have any hashable type as a key: with Enum, you can only have Enum members as keys.<br>
</blockquote>
<br></span>
Technically, an Enum has strings as keys (the member names), while the members themselves are the values; but list()ing an Enum returns the values (members) while a mapping would return the names (keys);  Enums are definitely a bit strange!<span class=""><br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
So I have no idea why you would want to return False, rather than TypeError, other than (1) the distinction probably<br>
doesn't matter to most people (2) backward compatibility.<br>
</blockquote>
<br></span>
To me, `in` is an equality test, and equality tests should never, ever raise exceptions -- they should return True or False.  Which is why I was surprised that `1 in "hello"` raised instead of returning False.  However, I have learned that in certain situations, such as str or dict or set, if it is impossible to contain the item being searched for then raising an exception is appropriate.<br>
<br>
Hence my questions now on deciding what the behavior /should/ be, and whether practicality has a log to stand on in this case.  ;)<div class="HOEnZb"><div class="h5"><br>
<br>
--<br>
~Ethan~<br>
______________________________<wbr>_________________<br>
Python-Dev mailing list<br>
<a href="mailto:Python-Dev@python.org" target="_blank">Python-Dev@python.org</a><br>
<a href="https://mail.python.org/mailman/listinfo/python-dev" rel="noreferrer" target="_blank">https://mail.python.org/mailma<wbr>n/listinfo/python-dev</a><br>
Unsubscribe: <a href="https://mail.python.org/mailman/options/python-dev/guido%40python.org" rel="noreferrer" target="_blank">https://mail.python.org/mailma<wbr>n/options/python-dev/guido%<wbr>40python.org</a><br>
</div></div></blockquote></div><br><br clear="all"><br>-- <br><div class="gmail_signature" data-smartmail="gmail_signature">--Guido van Rossum (<a href="http://python.org/~guido" target="_blank">python.org/~guido</a>)</div>
</div>