我在GAE的一次鼻子测试中发现了一些非常奇怪的行为,不太确定如何进一步调试它...任何想法为什么失败都会被赞赏...
# Main Testing file stripped to the basics
# -*- coding: utf-8 -*-
import unittest
import pickle
from collections import OrderedDict
from ptest import SomeClass
class PickleTest(unittest.TestCase):
def runTest(self):
res = OrderedDict()
for item in [1, 2, 3]:
res[item] = "test"
#works
pickle.dumps(res)
#fails
otherClass = SomeClass()
test = otherClass.pTest("Nav")
if __name__ == '__main__':
unittest.main()
导入的类文件:
import pickle
from collections import OrderedDict
class SomeClass:
def pTest(self, tableName=None, rightsTrimmed=True):
return pickle.dumps(OrderedDict())
导致
PicklingError: Can't pickle <class 'collections.OrderedDict'>: it's not the same object as collections.OrderedDict
但奇怪的是,只有导入类中的语句,而不是主要语句。
我的智慧结束了。在正常的GAE开发/生产环境中执行,代码可以工作......系统Python版本是Python 2.7.5。
答案 0 :(得分:0)
感谢Oleksiy,我发现在插入断点时,测试运行但没有修改代码。施坦格。我无法想象为什么,但这让我觉得在时间方面真的很奇怪。并且,为了证实这种怀疑,我尝试过延迟导入OrderedDict,这是有效的。
这是第一次发现,将我的生产代码更改为后期导入以允许测试运行似乎很疯狂。我会读到迟到的进口情况并考虑如何继续......
# -*- coding: utf-8 -*-
import pickle
#from collections import OrderedDict
class SomeClass:
def pTest(self, tableName=None, rightTrimmed=True):
# The Demons seem to be pleased by the late import...
from collections import OrderedDict
return pickle.dumps(OrderedDict())