保存空列表时 python 搁置时出错

Error on python shelve when saving an empty list

我想用 python 搁置保存我所有的变量(包括基元、对象、列表、字典等)。在我的工作区中,我有一些空列表,它们将在特定条件下或在我的代码的后续步骤中使用和填充。不幸的是,当我想用​​ python shelve 保存我的工作区时,它会在空列表键上引发错误。我的代码如下:

for key in dir():   
    try:
        my_ws[key] = globals()[key]
    except TypeError:       
        print('ERROR shelving: {0}'.format(key))

你有什么想法吗?

酸洗空列表没有问题。但是当试图在 globals() 中查找局部变量 (dir) 时,您肯定会遇到关键错误。除了在全局范围内调用时,dir() 将 return 各种你不想保存的名称,如模块、函数、__file____doc__

如果您粘贴的代码位于某个函数中,那么试试这个:

def f():
    a = []
    b = []
    for k, v in locals().items():
        my_ws[k] = v

搁置没有空列表的问题。

请确保: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))