回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我在GAE Python应用程序的这行代码中得到一个PicklingError:</p>
<pre><code>deferred.defer(email_voters_begin, ekey, voter_list)
</code></pre>
<p>这三个论点是:</p>
<ul>
<li>电子邮件选民开始——一个Python函数,例如,函数email选民开始于0x1035d4488</li>
<li>ekey——我定义的实体的键,例如,打印为agdvcGF2b3Rlcg4LEghFbGVjdGlvbhgCDA</li>
<li>投票者列表——我定义的对象列表,例如,[位于0x103D310的models.voter对象。。。]</li>
</ul>
<p>当这一行作为测试的一部分执行时(使用webtest和nosegae),我得到以下错误:</p>
<pre><code>Traceback (most recent call last):
[...]
File "/Users/joneill/OpenSTV/OpenSTV/trunk/OpaVote-HR/tasks.py", line 29, in init_voters_and_send_email
deferred.defer(email_voters_begin, ekey, voter_list)
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/ext/deferred/deferred.py", line 249, in defer
pickled = serialize(obj, *args, **kwargs)
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/ext/deferred/deferred.py", line 221, in serialize
return pickle.dumps(curried, protocol=pickle.HIGHEST_PROTOCOL)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py", line 1374, in dumps
Pickler(file, protocol).dump(obj)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py", line 224, in dump
self.save(obj)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py", line 286, in save
f(self, obj) # Call unbound method with explicit self
[...]
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py", line 331, in save
self.save_reduce(obj=obj, *rv)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py", line 396, in save_reduce
save(cls)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py", line 286, in save
f(self, obj) # Call unbound method with explicit self
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py", line 753, in save_global
(obj, module, name))
PicklingError: Can't pickle <class 'google.appengine.ext.blobstore.blobstore.BlobInfo'>: it's not the same object as google.appengine.ext.blobstore.blobstore.BlobInfo
</code></pre>
<p>请注意,传入<code>deferred.defer()</code>的<code>Voter</code>实体没有<code>BlobReference</code>属性,但是<code>Voter</code>实体对另一个具有<code>BlobReference</code>属性的实体具有<code>ReferenceProperty</code>属性。我不认为任何BlobInfo对象都是pickle的一部分,但错误表明其中包含一个对象。</p>
<p>当我使用dev服务器从浏览器窗口运行相同的代码时,不会发生此错误。</p>
<p>我很困惑如何调试这个和任何想法将非常感谢。</p>