Python中的错误在保存一个空列表时搁置

问题描述 投票:0回答:2

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

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

你有什么想法吗?

python python-3.x shelve
2个回答
1
投票

货架对空列表没有问题。

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

0
投票

腌制空列表没有问题。但是,当您尝试在globals()中查找局部变量(dir)时,肯定会遇到关键错误。除非在全局范围内调用,否则dir()将返回所有您不想保存的名称,例如模块,函数,__file____doc__等。

如果您粘贴的代码位于某个函数中,请尝试以下操作:

def f():
    a = []
    b = []
    for k, v in locals().items():
        my_ws[k] = v
© www.soinside.com 2019 - 2024. All rights reserved.