UnboundLocalError:局部变量'汤'在分配之前引用

时间:2017-04-20 21:29:28

标签: python-3.x

我对Python非常陌生,这是我的第一个真正的项目。我正在尝试制作网络抓取工具并收到此错误

import requests
from bs4 import BeautifulSoup


def main_spider(max_pages):
    page = 1
    while page < max_pages:
         url = "https://en.wikipedia.org/wiki/Star_Wars" + str(page)
         source_code = requests.get(url)
         plain_text = source_code.text
         soup = BeautifulSoup(plain_text)
    for link in soup.findAll("a"):
        href = link.get("href")
        print(href)
    page += 1

main_spider(1)

这是错误

for link in soup.findAll("a"):
UnboundLocalError: local variable 'soup' referenced before assignment    

2 个答案:

答案 0 :(得分:1)

import requests
from bs4 import BeautifulSoup


def main_spider(max_pages):
    page = 1
    while page < max_pages:
         url = "https://en.wikipedia.org/wiki/Star_Wars" + str(page)
         source_code = requests.get(url)
         plain_text = source_code.text
         soup = BeautifulSoup(plain_text)
         for link in soup.findAll("a"):
             href = link.get("href")
             print(href)
    page += 1

main_spider(1)

在您的情况下,soup具有while循环的本地范围,因此您只能在while内部访问它。

因为看起来你在单个页面上做汤(并使用while循环在页面之间移动),我相信你希望你的soup.findAll('a')在while循环中(每页的AKA)的基础上)。

答案 1 :(得分:0)

UnboundLocalError表示存在一个代码路径,在使用之前未分配局部变量。在这种情况下,在soup循环分配变量完成后使用while。代码不考虑while循环永远不会运行的情况。

暴露了其他错误。首先,for循环应缩进,以便它在while内运行。第二,为什么外环不运行?这只是条件中拼写错误的情况:<+应该是<=