我试图把一些网站我爬进了一个货架,但货架不会接受任何网站对象。它将接受列表,字符串,元组,你有什么,但只要我把一个站点对象,它崩溃的时候我试图让货架

内容

所以,当我填写了我的货架是这样的:

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模块所做的)此问题是典型的。

的溶液,如pduel所暗示的,是提供在相同的位置,这曾经是一个向后兼容性参照类,以便pickle可以找到它。如果您重新保存所有对象,从而重建泡菜,你可以删除向后comatibility referece。

其他提示

看来,Python是寻找一个“站点”对象的构造,并没有发现它。我没有用货架,但我记得什么可以腌制是拜占庭式的规则,并怀疑货架规则类似。

尝试添加行:

网站= sitemodule.Site

(与模块提供“网站”的名称),然后再尝试unshelving。这确保了站点类可以找到。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top