试着在Python和selenium 不让…except抛出NoSuchElementException

Try…except not catching NoSuchElementException in python and selenium

本问题已经有最佳答案,请猛点这里访问。

我有以下代码:

1
2
3
4
5
6
7
def test_counter(self):
    try:
        if self.driver.find_element_by_id(self.counter).text == 'texttexttext':
            return True
    except NoSuchElementException and StaleElementReferenceException:
        self.fix_error()
    return False

我不明白为什么没有抓到NoSuchElementExceptionStaleElementReferenceException


如果AB都是真值,A and B就变成B。因此,NoSuchElementException and StaleElementReferenceException成为StaleElementReferenceException;代码只捕获那个异常。

1
2
>>> NoSuchElementException and StaleElementReferenceException
<class 'selenium.common.exceptions.StaleElementReferenceException'>

您需要使用except (NoSuchElementException, StaleElementReferenceException):捕获这两个异常。


更改此行:

1
except NoSuchElementException and StaleElementReferenceException:

进入:

1
except (NoSuchElementException, StaleElementReferenceException):

这就是原因:

1
2
>>> NoSuchElementException and StaleElementReferenceException
StaleElementReferenceException

and首先检查NoSuchElementException是否正确。既然是这样,它会检查StaleElementReferenceException是否正确。因为它也是真的,所以它返回这个类。

使用pylint,它会警告您:

1
Exception to catch is the result of a binary"and" operation (binary-op-exception)