KeyError и AtrributeError при попытке получить отложенный класс - Python 3.6 - PullRequest
0 голосов
/ 29 ноября 2018

При сериализации класса в одной программе (с полкой) я не могу получить его, не получив следующую ошибку:

 File "\Python36_64\lib\shelve.py", line 111, in __getitem__
    value = self.cache[key]
KeyError: 'foo'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "program.py", line 12, in <module>
    bar = db['foo']
  File "\Python36_64\lib\shelve.py", line 114, in __getitem__
    value = Unpickler(f).load()
AttributeError: Can't get attribute 'bar' on <module '__main__' (built-in)>

Это мой код инициализации полки.Скомпилировано:

import shelve 
class bar:
   x = {}
db = shelve.open('file.dat')
db['foo'] = bar

Я пытался получить панель классов в другой программе с помощью следующего кода.Это не скомпилировано должным образом .:

import shelve
db = shelve.open('file.dat')
bar = db['foo']

1 Ответ

0 голосов
/ 29 ноября 2018

Вы не можете хранить классы, мариновая и отсеивая их таким образом.Когда pickle нужно выбрать класс, он просто записывает модуль и имя класса, а не его содержимое.Рассол может быть снят только в среде, где для одного и того же модуля определен тот же класс.

...