unbundlocalerror:赋值之前引用的局部变量“items”

2024-09-28 18:56:12 发布

您现在位置:Python中文网/ 问答频道 /正文

Possible Duplicate:
convert list to string to insert into my sql in one row in python scrapy

我试图将从HTML页面提取的数据直接写入MySQL数据库。但是,过去有效的代码现在不再有效了。有人能帮我吗?

def parse(self, response):
    hxs = HtmlXPathSelector(response)
    sites = hxs.select('//ul/li')
    con = MySQLdb.connect(
        host="localhost",
        user="dreamriks",
        passwd="dreamriks",
        db="scraped_data"
    )
    cur = con.cursor()
    for site in sites:
        items = [site.select('//h2').extract()]
        item = [site.select('//h3').extract()]
        meta = [site.select('//meta').extract()]
    for index in range (len( items)):              #<-- exception raises here
        str = items[index]
        cur.execute("""Insert into h2_meta(h2) Values(%s)""",(str))
    con.commit()
    con.close()

上面的代码给出了以下错误:

exceptions.UnboundLocalError: local variable 'items' referenced before assignment

Tags: to代码inresponsesiteextractitemsh2
3条回答

如果for site in sites:由于sites为空而不迭代,则items永远不会初始化。

当您在for index in range (len( items)):中引用它时,代码假定items已被初始化。

你的契约破了。缩进块

for index in range (len( items)):
    str = items[index]
    cur.execute("""Insert into h2_meta(h2) Values(%s)""",(str))

还有四个空间。

你好像有缩进的问题。for index in range(len(items))for site in sites循环的部分,对吧?

    for site in sites:
        items = [site.select('//h2').extract()]
        item = [site.select('//h3').extract()]
        meta = [site.select('//meta').extract()]
        for index in range (len( items)):             # <-- make sure this has same
             str = items[index]                       # level of indenting as previous lines
             cur.execute("""Insert into h2_meta(h2) Values(%s)""",(str))

相关问题 更多 >