python - 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”
我明白我得到的错误是因为我无法访问属性点击,因为它列表有多个项目,因此我无法点击所有项目。但是我想要做的是避免在页面显示找不到该项目时甚至尝试访问它,我希望脚本简单地转到下一个项目并搜索。我该如何修改?
先感谢您。
解决方案
就像@JammyDodger 说的那样,在这种情况下,您需要使用带有 pass 的 try-except 。虽然使用这通常不是一个好兆头,因为您不想在大多数时候简单地忽略错误。pass
将简单地忽略错误并继续循环的其余部分。
try:
item.click()
except AttributeError:
pass
为了跳到循环的下一次迭代,您可能需要使用continue
关键字。
try:
item.click()
except AttributeError:
continue
推荐阅读
- bash - 在 Azure Dev Ops 中使用引用的 Bash 脚本中的变量
- javascript - 使用 axios 实现 API 和 Interface 之间的通信
- r - cat 消息延迟到计算结束
- xml - VB.net 并行读取大型 XML 文件
- sql - 如何在 SQL 中使用正则表达式,它只会找到一行
- c++ - 如何在c ++中独立获取每个积分的值?
- c# - 类属性可以是 T 还是 IEnumerable
? - flutter - 如何在不使用futurebuilder的情况下处理加载和完成
- javascript - 在关闭页面之前,Beforeunload 需要与网页进行一些交互
- python - 显示方程式结果的Tkinter动态标签?