我遇到了这个我无法解释的奇怪错误.
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 "", line 1, in
TypeError: 'NoneType' object is not callable
我明白这应该是一个错误.我不明白为什么它说’NoneType’对象不可调用.据我所知,我没有在导致错误的行中调用任何内容.
我预计错误会更像这样:
>>> b[b]
Traceback (most recent call last):
File "", line 1, in
TypeError: unhashable type: 'dict'
在我疯了之前,有人可以向我解释一下吗?
解决方法:
看看@Wooble建议的UserDict实现,我看到了这个:
__hash__ = None # Avoid Py3k warning
因此问题是因为UserDict的实现.
如果你真的需要使用你自己的字典类型,我建议直接从dict子类化并实现你自己的__hash__方法,或者,在例如freezeset的帮助下将字典转换为可哈希的对象:
>>> a = UserDict.UserDict()
>>> b[frozenset(a.items())]
标签:python,typeerror
来源: https://codeday.me/bug/20190626/1292204.html