考虑以下代码:
#!/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 obviousl根据其所有实例变量计算其哈希值,其中一个实例变量是一个集合。然而,当我发现这一点时,找到它是很痛苦的。
所以,我的问题是,为什么错误信息显示这一点?如果不是TypeError: unhashable type: 'Person'的话。为什么追踪不是从蟒蛇的肠子里来的,实际上是错误的地方。
发布于 2019-03-28 18:27:24
NamedTuple基于tuple类。请参阅collections.namedtuple()
tuple的散列是所有元素的组合散列。请参阅tupleobject.c
由于set是不可理解的,所以不可能对包含set的tuple或NamedTuple进行散列。
而且,由于集合的散列是用C实现的,所以您看不到回溯
https://stackoverflow.com/questions/55401942
复制相似问题