“赋值”之前引用了“局部变量”

2024-05-13 02:03:28 发布

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

def singers_band_info(url, pagetext):
    get_soup = lambda page:BeautifulSoup(page, 'html.parser')
    get_rows = lambda soup:soup.find_all("tr")
    get_cols = lambda row:row.find_all("th") + row.find_all("td")
    get_colstd = lambda row:row.find_all("td")
    rows = get_rows(get_soup(pagetext))
    for row in rows:
        cols = get_cols(row)
        colstd = get_colstd(row)
        if cols[0].get_text() == "Born":
            try:
                born = colstd[0].get_text()
                born = born[1:11]
            except:
                born = "False"
        if cols[0].get_text() == "Years active":
            try:
                ya = colstd[0].get_text()
            except:
                ya = "False"
        if cols[0].get_text() == "Genres":
            try:
                genres = colstd[0].get_text()
            except:
                genres = "False"
    singer_band_info_d = dict(url = url, genres = genres, born = born, ya = ya)
    return singer_band_info_d    

Tags: lambdatextinfogetbandallfindrows
2条回答

如果您得到了这个错误,这只是意味着您调用或试图分配一个不存在的变量。在

要解决此问题,请在函数定义之前添加born = ""。在

作为一种很好的检查方法,您可以给变量born一个默认赋值,比如"Something went wrong."或{}。然后在函数完成执行之前打印出变量。如果它卡在那里,那么您就知道问题出在try/excepts.

for row in rows循环中分配born变量。问题是可能没有行,因此没有born赋值。在

born = "False"放在这个循环之前。在

相关问题 更多 >