【发布时间】:2019-11-10 00:24:48
【问题描述】:
我想将一个对象保存在一个文件中,以便稍后(程序关闭后)使用它。
我尝试使用 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
在代码行中,我尝试将对象写入文件。
我发现我必须将 sys.setrecursionlimit() 设置为更高的值,因此在没有错误之前将其设置为随机值,我这样做:
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
【问题讨论】:
-
我们需要查看您的对象。你能粘贴
MyWeirdClass()的代码吗? -
它就像 90 大行代码,真的很重要吗?如果有帮助,对象的变量之一是对象列表。
-
感谢大家的 cmets,但我发现了问题所在(见帖子)。