【问题标题】:looping in python and checking for logic in try/except method在 python 中循环并在 try/except 方法中检查逻辑
【发布时间】:2014-03-19 13:56:18
【问题描述】:

我不是 python 专家,我不理解对我来说似乎非常基本的东西。就是这样:

我正在使用 selenium 获取网页,在特定位置查找链接(实际上是指向“下一页”的链接),如果存在链接,请单击它并重新开始。我的一段代码是这样的:

check = True
while check:

    #do something

    #check if there is a link to a "next page":

    try:
        nextPageLink=driver.find_element_by_xpath("//div[@class='pgLinks']/a[3]")

        nextPageLink.click()
        time.sleep(timeToCharge)
    except:
        check = False

此代码只运行一次。它找到到下一页的链接,点击它,但它不再运行循环,就像它通过 except 中的代码并将变量检查设置为 False 一样。

知道为什么会这样以及我应该怎么做吗?

谢谢

【问题讨论】:

  • 您是否尝试将print 语句添加到except 块以查看它是否被触发? @sshashank124 这会使代码只运行一次,OP 希望它继续循环。
  • 问题可能是link 在您使用之前没有定义(实际上应该是driver.get(nextPageLink))?一般来说,最好不要使用纯 except: 语句,因为这样你会捕获所有异常,但通常你想捕获一个特定的异常。
  • 要单击链接,请致电nextPageLink.click()。
  • @user1862963 基于@IanAuld 的评论,您还可以将except 子句扩展为except Exception as e:,然后通过print(e)(或print e,如果您正在使用)打印出异常蟒蛇2)。根据下面@Daniel Roseman 的回答,这可能会提供对正在发生的事情的一些见解,并让您了解应该真正捕获哪些异常。
  • 我在 try 和 except 块中都添加了打印:try 块工作正常,它会找到链接并点击它;除了块也触发了

标签: python loops selenium logic


【解决方案1】:

问题可能是您正在捕获所有异常。某事可能会在其他行中引发异常,并且您的 catch-all 子句正在被触发。

不要那样做。找出您期望的异常,然后只捕获它们。其他任何错误都是合法的错误,应该冒泡。

【讨论】:

  • 解决了,这就是问题所在,按照您提出的所有建议,我发现了其他我不感兴趣的异常情况。谢谢!
猜你喜欢
  • 2015-11-22
  • 1970-01-01
  • 1970-01-01
  • 2021-12-13
  • 1970-01-01
  • 2016-04-06
  • 1970-01-01
  • 2014-10-01
  • 1970-01-01
相关资源
最近更新 更多