我遇到了这个我无法解释的奇怪错误。
Python 2.7.1+ (r271:86832, Apr 11 2011, 18:05:24)
[GCC 4.5.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import UserDict
>>> a = UserDict.UserDict()
>>> b = {}
>>> b[a]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'NoneType' object is not callable
我知道这应该是一个错误。我不明白为什么会说'NoneType' object is not callable
。据我所知,我没有在导致错误的行中调用任何内容。
我预计错误会更像这样:
>>> b[b]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'dict'
在我疯了之前,有人可以向我解释一下吗?
答案 0 :(得分:4)
按照@Wooble的建议查看UserDict
实现,我看到了:
__hash__ = None # Avoid Py3k warning
因此问题是因为UserDict
的实施。
如果你真的需要使用你自己的字典类型,我建议直接从dict
继承子类并实现你自己的__hash__
方法,或者在字体的帮助下将字典转换为可哈希的对象例如,frozenset
:
>>> a = UserDict.UserDict()
>>> b[frozenset(a.items())]
答案 1 :(得分:0)
UserDict.UserDict().__hash__
是None
。结合Wooble的评论,您将看到为什么会发生这种情况