python - 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 个令人难以置信的事实我无法解释:
- 一切都按预期工作,直到我更改 nX > 24。因此,如果例如 nX=20,一切正常。
- 没有
Errors
被抛出,既不是在我自己的代码中,也不是在pickle.dump()
. - 当错误发生时,即使ie之前的行也不会执行,接下来的行也不会执行。似乎变量也被删除了。我的 Spyder 编辑器在变量资源管理器中显示它们,但是当我尝试从控制台访问它们时,它会抛出.
pickle.dump()
print(...)
NameError: name 'variable_name' not defined
我知道这是一种毒品,我肯定会怀疑我的代码有问题;但没有,Errors
我无能为力。如果我的代码有问题,它至少不会在Error
? pickle.dump()
.
解决方案
推荐阅读
- python - 为什么这个正则表达式不匹配所有内容,直到第一个捕获组再次出现?
- delphi - Compiling\Building Delphi project on XE7 throws error - 无法访问文件 tmpXXXX.tmp.Exec.bat 因为它正在被使用
- javascript - 缩小代码后出现 Linkedin 注册按钮错误
- php - 如何检查第一个数组元素是否存在于php中其他元素的相同多维关联数组中
- ios - 如何存储单元格的选择,需要最佳实践
- typo3 - TYPO3 数据库从流体含量到通量的迁移
- android - 如何完全滚动 RecyclerView
- c# - EFCore 更新使用 UnitOfWork 存储库和带有 AutoMapper 的服务
- java - 如何配置 Tomcat 以在出站连接中使用 TLS v1.2
- reactjs - React Router 导航到单选按钮选择的另一个页面