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()