【问题标题】:Optimal way of using try/except in python在 python 中使用 try/except 的最佳方式
【发布时间】:2020-06-18 17:18:55
【问题描述】:

我目前正在学习使用 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 和一般编码的新手,所以我也想知道您将如何确定“正确的方法”?是否有某种编程规范或像某些人说的 Python 方式来确定如何进行该过程?

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

【问题讨论】:

  • 旁注:你可能不想成为using a bare except clause。这将捕获所有错误,包括那些不是从Exception 派生的错误,例如KeyboardInterruptSyntaxError

标签: python web-scraping


【解决方案1】:

使用while 循环,如果您捕获异常则中断。

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

【讨论】:

  • 我使用了 while 循环和 else 块 3 最大尝试和 20 秒等待。
猜你喜欢
  • 2019-06-26
  • 1970-01-01
  • 2018-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-06
  • 2013-11-21
  • 2013-11-13
相关资源
最近更新 更多