我想将一个对象保存在一个文件中,以便以后(程序关闭后)使用它。你知道吗
我试着用pickle,但看起来它不像我的对象:D
Traceback (most recent call last):
File "(path)", line 4, in <module>
pickle.dump(object, f)
AttributeError: Can't pickle local object '_createenviron.<locals>.encodekey'
代码如下:
import pickle
object = MyWeirdClass()
with open("data.pickle", "wb") as f:
pickle.dump(object, f)
还有其他保存对象的方法吗(如外部库)? 我做错了什么而我犯了这个错误? 我的MyWeirdClass()类运行得非常好,我对它进行了多次测试,结果完全符合我的预期。你知道吗
编辑:
我发现问题是对象的一个变量是selenium.webdriver.chrome浏览器.webdriver.webdriver文件 对象。在删除这个对象之后(在做了我想要的事情之后),它工作得很好。你知道吗
第二次编辑:
我也有一个错误:
RecursionError: maximum recursion depth exceeded while pickling an object
在代码行中,我试图将对象写入文件。你知道吗
我发现我必须设置系统设置递归限制()设置为更高的值,因此在没有错误之前,我不将其设置为随机值,而是执行以下操作:
import pickle
import sys
default_cursion_limit = sys.getrecursionlimit()# defalut is 1000
object = MyWeirdClass()
while True:
try:
with open("data.pickle", "wb") as f:
pickle.dump(object, f)
break
except RecursionError:
default_cursion_limit += 50
sys.setrecursionlimit(default_cursion_limit)# looks like its working with 2600
最简单的解决方案是以可pickle的方式定义类。错误消息表明类的某些属性不能被pickle,因为它们没有全局作用域名称。你知道吗
如果要保存不可pickle的对象,则需要编写自己的逻辑来序列化和反序列化它。在没有看到对象的情况下给出具体的建议是不可能的,但是一般的想法是,您需要弄清楚如何将对象的状态表示为可以pickle的东西(比如一系列简单的string/int属性),然后编写一个函数,从该数据中重构对象。你知道吗
相关问题 更多 >
编程相关推荐