首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用python 'shelve‘字典赋值时出现异常

使用python 'shelve‘字典赋值时出现异常
EN

Stack Overflow用户
提问于 2013-06-02 03:21:19
回答 1查看 474关注 0票数 0

在搁置模块中发现了一个奇怪的异常(好吧,搁置助手copy_reg模块)。看一看,它正在尝试调用对应该是Pickler类的__getstate__方法的引用。但是,由于某些原因,这似乎没有返回任何结果。我只是想知道是否有其他人经历过这种情况,以及是否可以做些什么来让shelve正常工作?

下面是我看到的异常的返回堆栈:

代码语言:javascript
复制
  File "/usr/local/lib/python2.7/dist-packages/libgsync/drive/__init__.py", line 497, in stat
    self._pcache[search] = ent
  File "/usr/lib/python2.7/shelve.py", line 132, in __setitem__
    p.dump(value)
  File "/usr/lib/python2.7/copy_reg.py", line 84, in _reduce_ex
    dict = getstate()
DEBUG:      libgsync/drive/__init__.py:387:walk(): Exception: 'NoneType' object is not callable

我冒然查看了代码,这里是_reduce_ex()函数中出现故障的地方:

代码语言:javascript
复制
try:
    getstate = self.__getstate__
except AttributeError:
    if getattr(self, "__slots__", None):
        raise TypeError("a class that defines __slots__ without "
                        "defining __getstate__ cannot be pickled")
    try:
        dict = self.__dict__
    except AttributeError:
        dict = None
else:
    dict = getstate()

最初,它将self.__getstate__赋值给getstat,因此此时这应该是可调用的。它似乎没有引发异常,因为它是在else块的上下文中执行的。奇怪的是。

以下是发生异常的代码行的调试输出:

代码语言:javascript
复制
DEBUG:        libgsync/drive/__init__.py:496:stat(): Updating path cache: /unittest

下面是导致异常的代码:

代码语言:javascript
复制
# Update path cache.
if self._pcache.get(search) is None:
    debug("Updating path cache: %s" % search)
    self._pcache[search] = ent
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-02 03:54:47

分配给工具架字典的值不是可复制的对象。我通过将字典的类包装推迟到缓存之后解决了这个问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16876364

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档