Какой модуль использовать в скрипте полки

У меня есть скрипт, который я только что нашел в стеке для хранения переменных, и я получаю сообщение об ошибке:

'Traceback (most recent call last):
  File "/Users/*confidentialname*/Documents/Shelving.py", line 11, in <module>
    my_shelf[key] = globals()[key]
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/shelve.py", line 124, in __setitem__
    p.dump(value)
_pickle.PicklingError: Can't pickle <class 'module'>: attribute lookup module on builtins failed
>>> '

Что я делаю? Вот ссылка, по которой я нашел код: Как мне сохранить все переменные в текущем сеансе Python? Вот код:

import shelve

T='Hiya'
val=[1,2,3]

filename='/tmp/shelve.out'
my_shelf = shelve.open('Shelvingthing','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()
#To restore:

my_shelf = shelve.open(Shelvingthing)
for key in my_shelf:
    globals()[key]=my_shelf[key]
my_shelf.close()

print(T)
# Hiya
print(val)
# [1, 2, 3]

Обновление: я изменил код, чтобы он выглядел как инструкция и получил это предупреждение:

ERROR shelving: builtins: Can't pickle <class 'module'>: attribute lookup module on 
builtins failed ERROR shelving: my_shelf: can't pickle _dbm.dbm objects 

ERROR shelving: shelve: Can't pickle <class 'module'>: attribute lookup 
module on builtins failed Hiya [1, 2, 3] >>> 

1 ответ

Решение

Ошибка возникает, когда код пытается shelve глобальная переменная - это та, которая создана import shelve заявление! Модули отборные. Я считаю, что этот код был написан для другой версии Python - там TypeError был брошен; но теперь теперь непонятные значения будут выбрасывать _pickle.PickleError, который не является TypeError,

На самом деле, возможно, вы хотели бы просто игнорировать любые исключения из shelve:

for key in dir():
    try:
        my_shelf[key] = globals()[key]
    except Exception as ex:
        #
        # __builtins__, my_shelf, and imported modules can not be shelved.
        #
        print('ERROR shelving: {}: {}'.format(key, ex))
Другие вопросы по тегам