gpt4 book ai didi

python - 搁置给出奇怪的错误

转载 作者:行者123 更新时间:2023-11-28 22:07:07 25 4
gpt4 key购买 nike

我正在尝试将我爬取的一些站点放入搁置中,但搁置不接受任何站点对象。它会接受列表、字符串、元组,你有什么,但是一旦我放入站点对象,当我尝试获取搁置的内容时它就会崩溃

所以当我像这样填满我的书架时:

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 也没有太多信息。他们只说 shelve 中的键必须是字符串,但值或数据可以是“任意对象”

最佳答案

看起来您在将对象保存到货架后重构了您的代码。当从架子上取回对象时,Python 会重建对象,它需要找到您可能已移动的原始类。这个问题在使用 pickle 时很典型(就像 shelve 模块一样)。

正如 pduel 所建议的那样,解决方案是在类以前所在的相同位置提供一个向后兼容的引用,以便 pickle 可以找到它。如果您重新保存所有对象,从而重建泡菜,您可以删除该向后兼容性引用。

关于python - 搁置给出奇怪的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2601081/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com