首页 > 解决方案 > Python - 如何在遍历列表时处理异常?

问题描述

我正在使用 Selenium 库并尝试遍历项目列表在网络上查找它们,而当我的循环在找到项目时工作时,当在网页上找不到项目时,我很难处理异常。对于这种情况,我知道如果找不到该项目,页面将在我可以访问的范围内显示“No Results For”:

browser.find_by_xpath('(.//span[@class = "a-size-medium a-color-base"])[1]')[0].text

现在的问题是这个跨度只在没有找到项目循环搜索时出现。所以我尝试了这个逻辑,如果这个跨度不存在比它意味着找到项目所以执行循环的其余部分,如果跨度确实存在并且等于“没有结果”,那么去搜索下一个项目。这是我的代码:

data = pd.DataFrame()
for i in lookup_list:
    start_url = f"https://www.amazon.com/s?k=" + i +"&ref=nb_sb_noss_1"
    browser.visit(start_url)
    if browser.find_by_xpath('(.//span[@class = "a-size-medium a-color-base"])[1]') is not None :
    #browser.find_by_xpath("//a[@class='a-size-medium a-color-base']"):
        item = browser.find_by_xpath("//a[@class='a-link-normal']")
        item.click()
        html = browser.html
        soup = bs(html, "html.parser")
        collection_dict ={
            'PART_NUMBER': getmodel(soup),
            'DIMENSIONS': getdim(soup),
            'IMAGE_LINK': getImage(soup)        
        }
    elif browser.find_by_xpath('(.//span[@class = "a-size-medium a-color-base"])[1]')[0].text != 'No results for':
        continue
    data = data.append(collection_dict, ignore_index=True)

我得到的错误是:

AttributeError:“ElementList”对象没有属性“click”

我明白我得到的错误是因为我无法访问属性点击,因为它列表有多个项目,因此我无法点击所有项目。但是我想要做的是避免在页面显示找不到该项目时甚至尝试访问它,我希望脚本简单地转到下一个项目并搜索。我该如何修改?

先感谢您。

标签: pythonseleniumselenium-webdriver

解决方案


就像@JammyDodger 说的那样,在这种情况下,您需要使用带有 pass 的 try-except 。虽然使用这通常不是一个好兆头,因为您不想在大多数时候简单地忽略错误。pass将简单地忽略错误并继续循环的其余部分。

try:
    item.click()
except AttributeError:
    pass

为了跳到循环的下一次迭代,您可能需要使用continue关键字。

try:
    item.click()
except AttributeError:
    continue 

推荐阅读