AttributeError:'Spi der'对象没有属性'table'

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AttributeError:'Spi der'对象没有属性'table'相关的知识,希望对你有一定的参考价值。

我正在和scrapy一起工作。我有一个开头的蜘蛛:

class For_Spider(Spider):

    name = "for"
#    table = 'hello' # creating dummy attribute. will be overwritten

    def start_requests(self):

        self.table = self.dc # dc is passed in

我有以下管道:

class DynamicSQLlitePipeline(object):

    @classmethod
    def from_crawler(cls, crawler):
        # Here, you get whatever value was passed through the "table" parameter
        table = getattr(crawler.spider, "table")
        return cls(table)

    def __init__(self,table):
        try:
            db_path = "sqlite:///"+settings.SETTINGS_PATH+"\data.db"
            db = dataset.connect(db_path)
            table_name = table[0:3]  # FIRST 3 LETTERS
            self.my_table = db[table_name]

当我启动蜘蛛:

scrapy crawl for -a dc=input_string -a records=1

我明白了:

AttributeError: 'For_Spider' object has no attribute 'table'

如果我取消注释'table',程序将启动。我很困惑为什么'table'有效,但self.table没有。有人可以解释一下吗?

答案

table将起作用,因为它是For_Spider的类属性,而self.table就在函数范围内。 self表示实例本身,所以在这种情况下你不需要使用它(除非你在__init__中定义它)。 如果您尝试在函数范围之外定义self.table,您将收到错误。

另外,尝试在两个类上使用__dict__来查看它们的属性和功能 用表评论:

{'doc':无,'start_requests':,'name':'for','module':'builtins'})

如您所见,没有table属性

表没有评论:

{'doc':无,'start_requests':,'table':'hello','name':'for','module':'builtins'})

我希望很清楚:>

以上是关于AttributeError:'Spi der'对象没有属性'table'的主要内容,如果未能解决你的问题,请参考以下文章

python报错提示AttributeError: 'QString' object has no attribute 'startswith'

AttributeError: 'int' object has no attribute 'log'

解决:pipenv shell报错:AttributeError: 'module' object has no attribute 'run'

Python错误:AttributeError: 'generator' object has no attribute 'next'解决办法

python出错:AttributeError: 'int' object has no attribute 'encode'

AttributeError: 'module' object has no attribute 'RAND_LIMIT_swigconstant