On 07/20/2013 03:21 AM, Ronald Oussoren wrote:

On 20 Jul, 2013, at 1:47, Ethan Furman <et...@stoneleaf.us> wrote:

While working on issue #18508 I stumbled across this:

Traceback (most recent call last):
...
  File "/usr/local/lib/python3.4/enum.py", line 417, in __new__
    if value in cls._value2member_map:
TypeError: unhashable type: 'list'

I'll wrap it in a try-except block, but I must admit I was surprised the answer 
wasn't False.  After all, if the input is unhashable then obviously it's not in 
the dict; furthermore, if I were to compare the number 5 with a set() I would 
get False, not a TypeMismatch error, and dict keys are basically done by 
equality, the hash is just (?) a speed-up.

Not quite, there are some objects that compare equal without both of them being 
hashable:

frozenset([1,2]) == set([1,2])
True
dct = { frozenset([1,2]): 1 }
frozenset([1,2]) in dct
True
set([1,2]) in dct
Traceback (most recent call last):
   File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'set'

It would be strange if the last test would return False instead of raising an 
error.

Yeah, that would be unfortunate.

Okay, I can see dict.__contains__ and friends raising a TypeError, but what about dict.keys() ? In 2.x it returned a list, in 3.x it returns a dict_keys, and dict_keys also raises an error instead of returning False.

--
~Ethan~
_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to