我想用python搁置保存我的所有变量(包括基元,对象,列表,字典等)。在我的工作区中,我有一些空列表,这些空列表将在特定条件下或代码的后续步骤中使用和填充。不幸的是,当我想用python shelve
保存我的工作区时,会在空列表键上引发错误。我的代码如下:
for key in dir():
try:
my_ws[key] = globals()[key]
except TypeError:
print('ERROR shelving: {0}'.format(key))
你有什么想法吗?
货架对空列表没有问题。
请确保:1)在使用搁置对象之前,请正确对其进行初始化。 2)排除所有无法序列化的元素。它使用pickle模块,支持的所有元素都可以在这里找到:https://docs.python.org/3/library/pickle.html#what-can-be-pickled-and-unpickled
检查下面的代码是否对您有用,是否遇到任何错误。
import inspect
import shelve
my_ws = shelve.open('test')
for key in dir():
if not inspect.ismodule(globals()[key]):
try:
my_ws[key] = globals()[key]
except TypeError:
print('ERROR shelving: {0}'.format(key))
腌制空列表没有问题。但是,当您尝试在globals()中查找局部变量(dir)时,肯定会遇到关键错误。除非在全局范围内调用,否则dir()将返回所有您不想保存的名称,例如模块,函数,__file__
,__doc__
等。
如果您粘贴的代码位于某个函数中,请尝试以下操作:
def f():
a = []
b = []
for k, v in locals().items():
my_ws[k] = v