索引到dict时,Python NoneType不可调用

时间:2012-01-31 11:23:22

标签: python typeerror

我遇到了这个我无法解释的奇怪错误。

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'

在我疯了之前,有人可以向我解释一下吗?

2 个答案:

答案 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的评论,您将看到为什么会发生这种情况