考虑以下代码:
#!/usr/bin/env python3.7
from typing import NamedTuple, Set
class Person(NamedTuple):
name: str
fred: Set[str]
p = Person("Phil", set())
print(p)
my_dict = {}
my_dict[p] = 10
print(my_dict)
产生此错误
Traceback (most recent call last):
File "./temp.py", line 14, in <module>
my_dict[p] = 10
TypeError: unhashable type: 'set'
在这种情况下,它是示例代码,我已经对其进行了很多简化,因此很容易看出错误来自哪里。typed.NamedTuple
显然是根据它的所有实例变量计算它的哈希值,其中一个是一个集合。然而,当我发现这一点时,追查起来很痛苦。
所以,我的问题是,为什么错误消息会显示这个?应该不是TypeError: unhashable type: 'Person'
。以及为什么回溯不是来自错误实际所在的python内部。