首页 > 解决方案 > 在 python 中使用 try/except 的最佳方式

问题描述

我目前正在学习使用 python 从网站上抓取数据。我正在使用的网站类型很慢,并且在一天中多次停止工作,因此我不得不经常使用 try/catch。

例如:(在这种情况下,如果 chrome webdriver 带有 selenium,则为驱动程序)

time.sleep(2)
try:
    dist_lst = [i.text for i in driver.find_element_by_xpath('//*[@id="cphBody_GridArrivalData"]').find_elements_by_tag_name('tr')]
except:
    input("Check if data is loaded")
    dist_lst = [i.text for i in driver.find_element_by_xpath('//*[@id="cphBody_GridArrivalData"]').find_elements_by_tag_name('tr')]

我想知道哪种方法是“正确”的方法,为什么:

  1. 使用 if 语句检查是否:数据已加载,然后执行列表理解 else:要求用户检查
  2. 使用 try: 无论如何都要执行列表推导,如果它失败然后要求用户检查数据是否已加载,然后再次执行列表推导
  3. 有一个更好的方法吗?

我是 python 和一般编码的新手,所以我也想知道你将如何确定“正确的方法”?是否有某种编程规范或像某些人说的pythonic方式来确定如何进行该过程?

PS:我读过python中的列表理解很慢,所以如果我没有在示例代码中使用列表理解,你的答案会改变吗?

标签: pythonweb-scraping

解决方案


使用while循环,如果你没有捕捉到异常就会中断。

while True:
    try:
         dist_lst = [...]
         break
    except Exception:
        input("Check if data is loaded")

推荐阅读