我想从这里使用以下代码: How can I save all the variables in the current python session?
import shelve
T='Hiya'
val=[1,2,3]
filename='/tmp/shelve.out'
my_shelf = shelve.open(filename,'n') # 'n' for new
for key in dir():
try:
my_shelf[key] = globals()[key]
except TypeError:
#
# __builtins__, my_shelf, and imported modules can not be shelved.
#
print('ERROR shelving: {0}'.format(key))
my_shelf.close()
但它会出现以下错误:
Traceback (most recent call last):
File "./bingo.py", line 204, in <module>
menu()
File "./bingo.py", line 67, in menu
my_shelf[key] = globals()[key]
KeyError: 'filename'
你能帮我吗?
谢谢!
答案 0 :(得分:3)
从您的追溯中,您似乎正在尝试从函数内部运行该代码。
但是dir
会在当前本地范围中查找名称。因此,如果在函数内定义了filename
,它将位于locals()
而不是globals()
。
你可能想要更像这样的东西:
import shelve
T = 'Hiya'
val = [1, 2, 3]
def save_variables(globals_=None):
if globals_ is None:
globals_ = globals()
filename = '/tmp/shelve.out'
my_shelf = shelve.open(filename, 'n')
for key, value in globals_.items():
if not key.startswith('__'):
try:
my_shelf[key] = value
except Exception:
print('ERROR shelving: "%s"' % key)
else:
print('shelved: "%s"' % key)
my_shelf.close()
save_variables()
请注意,当从 函数中调用globals()
时,它会从函数定义的模块中返回变量,而不是从< EM>称为
因此,如果导入了save_variables
函数,并且您想要当前模块中的变量,那么请执行以下操作:
save_variables(globals())