Вопрос

Я пытаюсь положить некоторые сайты, которые я ползю в полку, но полки не примут никаких объектов сайта. Он примет списки, строки, кортежи, что у вас, но как только я поставил на объект сайта, он падает, когда я стараюсь получить содержание полки

Поэтому, когда я наполняю свои полки, как это:

def add_to_shelve(self, site):
    db = shelve.open("database")
    print site, site.url
    for word in site.content:
        db[word] = site.url #site.url is a string, word has to be one too

shelve.open("database")['whatever'] работает отлично.

Но если я сделаю это:

def add_to_shelve(self, site):
    db = shelve.open("database")
    print site, site.url
    for word in site.content:
        db[word] = site #site is now an object of Site

shelve.open("database")['whatever'] Ошибки с этим сообщением об ошибке:

AttributeError: 'module' object has no attribute 'Site'

Я полностью ошеломлен, а Pythondocs, как ни странно, не имеет много информации. Все, что они говорят, это то, что ключ в шелке должен быть строкой, но значение или данные могут быть «произвольным объектом»

Это было полезно?

Решение

Похоже, вы изменили свой код после сохранения объектов в полве. При извлечении объектов от полки Python восстановит объект, и ему необходимо найти оригинальный класс, который, по-видимому, вы перемещали. Эта проблема типична при работе с pickle (как то shelve Модуль делает).

Решение, как предполагает, что PDUE, состоит в том, чтобы обеспечить ссылку на обратную совместимость на класс в том же месте, которое оно раньше было, так что pickle могу найти это. Если вы повторно сохраните все объекты, тем самым восстановив соленья, вы можете удалить это обратную к счастью.

Другие советы

Похоже, что Python ищет конструктор для объекта сайта и не находить его. Я не использовал Shalve, но вспоминаю правила для того, что можно замариваться, являются византийцами, и подозреваю, что правила на полки аналогичны.

Попробуйте добавить строку:

Сайт = sitemodule.site.

(с именем модуля, обеспечивающего «сайт»), прежде чем попробовать нерешивку. Это гарантирует, что класс сайта можно найти.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top