赋值前引用的局部变量 'bet'

local variable 'bet' referenced before assignment

似乎有些网站没有给出可变投注的输出。 提到的网站只是我正在尝试的网站之一 _

cleaner('http://www.indeed.com/cmp/Akvelon,-Inc./jobs/Software-Database-Engineer-9f35bfbe02577e2a?sjdu=QwrRXKrqZ3CNX5W-O9jEvRFd8FQI4DEv5V74lSpSnHYgnddE4ZyZFNs76EkGRtDwtEmC1g0ZgP9j4kJzAk16Kmc5zfQEpyLY32nEHt1W9y4')
    def _cleaner(websr):
        html = urllib2.urlopen(websr).read()
        soup = BeautifulSoup(html)
        for elm in soup.find("span", id="job_summary").find_all("p"):
            betf = elm.get_text()
        for i in soup.find("span", id="job_summary").find_all("ul"):
            bet = i.get_text(" ")
        return betf+" "+bet

for 循环中的列表 (soup.find("span", id="job_summary".find_all("p")) 可能为空,导致 betbetf 无法分配。您可以预先分配变量以避免此问题:

def _cleaner(website):
    betf = ''
    bet = ''
    html = urllib2.urlopen(website).read()
    soup = BeautifulSoup(html)
    for elm in soup.find("span", id="job_summary").find_all("p"):
        betf = elm.get_text()
    for i in soup.find("span", id="job_summary").find_all("ul"):
        bet = i.get_text()
    return betf+" "+bet

由于对 bet 的赋值是在一个循环内的 try 块中,因此 soup.find("span", id="job_summary").find_all("ul") 必须是 non-empty 且 i.get_text() 必须至少成功一次为 bet 分配一个值。您应该确定在失败的情况下要做什么。您可以在 except 块中分配一个默认值,或者简单地在循环之前分配一些东西。上面的 betf 也是如此。