Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Plone “如何调试”;类型错误:Can';t在采集包装中pickle对象。”;在普隆_Plone_Zope_Zodb - Fatal编程技术网

Plone “如何调试”;类型错误:Can';t在采集包装中pickle对象。”;在普隆

Plone “如何调试”;类型错误:Can';t在采集包装中pickle对象。”;在普隆,plone,zope,zodb,Plone,Zope,Zodb,我有一个将成员添加到组的处理程序。此处理程序中的最后一行导致错误: TypeError: Can't pickle objects in acquisition wrappers. > /home/mnieber/.buildout/eggs/ZODB3-3.10.3-py2.6-linux-i686.egg/ZODB/serialize.py(431)_dump() 430 self._p.dump(classmeta) --> 431 se

我有一个将成员添加到组的处理程序。此处理程序中的最后一行导致错误:

TypeError: Can't pickle objects in acquisition wrappers.
> /home/mnieber/.buildout/eggs/ZODB3-3.10.3-py2.6-linux-i686.egg/ZODB/serialize.py(431)_dump()
    430         self._p.dump(classmeta)
--> 431         self._p.dump(state)
    432         self._file.truncate()
在pdb调试器中,我可以看到Plone确实在尝试pickle一个作为采集包装器的值:

ipdb> state
((((<PloneUser 'newuser@usecm.com'>, ('Default_Group',), 'maarten@usecm.com', ('PAS',)),),),)
ipdb> type(state[0][0][0][0])
<type 'Acquisition.ImplicitAcquisitionWrapper'>
完全错误如下:

Traceback (innermost last):
  Module ZPublisher.Publish, line 134, in publish
  Module Zope2.App.startup, line 301, in commit
  Module transaction._manager, line 89, in commit
  Module transaction._transaction, line 329, in commit
  Module transaction._transaction, line 443, in _commitResources
  Module ZODB.Connection, line 567, in commit
  Module ZODB.Connection, line 623, in _commit
  Module ZODB.Connection, line 658, in _store_objects
  Module ZODB.serialize, line 422, in serialize
  Module ZODB.serialize, line 431, in _dump
TypeError: Can't pickle objects in acquisition wrappers.
> /home/mnieber/.buildout/eggs/ZODB3-3.10.3-py2.6-linux-i686.egg/ZODB/serialize.py(431)_dump()
430         self._p.dump(classmeta)
--> 431         self._p.dump(state)
432         self._file.truncate()

我在pickle上遇到了这样的问题,并像你一样通过调试解决了

Pickle(用于在ZODB中存储对象)正在尝试序列化PloneUser,并引发此
采集包装器
错误

在我的例子中,我将
portal\u工作流
对象包装到另一个
,并且必须从
pickle.Pickler
继承它,并重写
getstate\uuuuu
方法来解决我的问题

pickle调用此方法以序列化对象。如果重写此方法,并返回
对象。如果没有此
PloneUser
,则不会引发此错误

这(虽然不是你的确切问题)有更多关于我想说什么的信息


很高兴您能解决您的问题。

我找到了防止问题发生的方法(这没有回答我最初提出的问题,即对于上述错误可以使用什么调试方法)。将成员添加到组中的代码应为:portal\u groups=getToolByName(getSite(),“portal\u groups”)membersGroup=portal\u groups.getGroupById('Default\u group')portal\u groups.addPrincipalToGroup(event.principal.getId(),membersGroup.getId())
Traceback (innermost last):
  Module ZPublisher.Publish, line 134, in publish
  Module Zope2.App.startup, line 301, in commit
  Module transaction._manager, line 89, in commit
  Module transaction._transaction, line 329, in commit
  Module transaction._transaction, line 443, in _commitResources
  Module ZODB.Connection, line 567, in commit
  Module ZODB.Connection, line 623, in _commit
  Module ZODB.Connection, line 658, in _store_objects
  Module ZODB.serialize, line 422, in serialize
  Module ZODB.serialize, line 431, in _dump
TypeError: Can't pickle objects in acquisition wrappers.
> /home/mnieber/.buildout/eggs/ZODB3-3.10.3-py2.6-linux-i686.egg/ZODB/serialize.py(431)_dump()
430         self._p.dump(classmeta)
--> 431         self._p.dump(state)
432         self._file.truncate()