0
在擱置模塊(以及擱置助手copy_reg模塊)中看到一個奇怪的例外。看一看,它試圖調用Pickler類的__getstate__方法的引用。然而,由於某種原因,這似乎沒有返回「無」。只是想知道是否有其他人已經經歷過這種情況,如果有什麼可以做到讓擱置工作正常?使用python'shelve'字典分配的例外
這裏是我看到異常的返回堆棧:
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()函數:
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塊的上下文執行。奇怪...
下面是一行代碼的調試輸出在異常發生:
DEBUG: libgsync/drive/__init__.py:496:stat(): Updating path cache: /unittest
,這裏是造成異常的代碼:
# Update path cache.
if self._pcache.get(search) is None:
debug("Updating path cache: %s" % search)
self._pcache[search] = ent
如果您發佈引發異常的實際代碼,可能會更有幫助。通過這種方式,我們可以看到異常的上下文是什麼,並幫助您,而不僅僅是看到模塊的代碼本身。 – pswaminathan
我編輯了原始問題以包含導致問題的代碼行。正如我所說,我的代碼似乎沒有錯。 'search'變量是一個設置爲'/ unittest'的字符串,'ent'是......哦,這是一個包裝字典的類,所以可能不會被醃製。但是,我會認爲這會在Pickler試圖醃製它時引發異常。 – Craig