首页 > 解决方案 > pickle.dump() 保存复杂对象失败,但没有抛出异常

问题描述

我正在尝试使用pickle. 该对象的结构被省略了,因为它非常复杂,但它不需要太多的内存(~5MB)。

nX = 20 
nY = 50
model = ComplexGridModel(nX, nY) # nX, nY number or elements in X, Y directions

# I don't think it's important but "model" is being use like this:
analyzer = OtherComplexObject(*args, **kwargs)
analyzer.model = model

start = time()
[...] # loop operations on model and analyzer
end = time()

# now the critical part
print("Finished in {:.2f} min".format(end/60 - start/60) ) # print elapsed time

with open('filename.pickle', 'wb') as file:
    pickle.dump(model, file, protocol=pickle.HIGHEST_PROTOCOL) # here crushes or sth like that, don't know

上面的代码创建了文件filename.pickle,但它是空的,大小为 0 KB。当我注释掉这pickle部分时,一切都完美无缺,但我仍然想保存model. 有 3 个令人难以置信的事实我无法解释:

  1. 一切都按预期工作,直到我更改 nX > 24。因此,如果例如 nX=20,一切正常。
  2. 没有Errors被抛出,既不是在我自己的代码中,也不是在pickle.dump().
  3. 当错误发生时,即使ie之前的行也不会执行,接下来的行也不会执行。似乎变量也被删除了。我的 Spyder 编辑器在变量资源管理器中显示它们,但是当我尝试从控制台访问它们时,它会抛出.pickle.dump()print(...)NameError: name 'variable_name' not defined

我知道这是一种毒品,我肯定会怀疑我的代码有问题;但没有,Errors我无能为力。如果我的代码有问题,它至少不会在Error? pickle.dump().

标签: pythonobjectpickle

解决方案


推荐阅读