如何在Python try / except中包含while循环?

时间:2015-08-27 15:46:41

标签: python selenium-webdriver exception-handling while-loop try-catch

使用Python的Selenium Webdriver经常无法启动Firefox浏览器,并且经常需要重试。通常单次或二次重试就足够了,所以我做了以下几点:

try: 
    self.driver = webdriver.Firefox()
except WebDriverException, e:
    print "Unable to load profile, retrying"
    try: 
        self.driver = webdriver.Firefox()
    except WebDriverException, e:
        print "Unable to load profile, retrying"
        self.driver = webdriver.Firefox()

现在不再为我服务,因为它现在经常在浏览器启动之前进行3次或更多次重试。合并while循环的最佳方法是什么,它会一直重试,直到浏览器成功加载(此时self.driver将作为对象存在)?

注意:我知道可能会遇到无限循环,但为了提供建议,您可以忽略这一事实。

3 个答案:

答案 0 :(得分:3)

如何在self.driver循环之前将None定义为while,然后循环直到它不是None?示例 -

self.driver = None
while not self.driver:
    try: 
        self.driver = webdriver.Firefox()
    except WebDriverException, e:
        print "Unable to load profile, retrying"

答案 1 :(得分:2)

您可以使用python的else子句。查看python's exception handling

while True:
    try:
        self.driver = webdriver.Firefox()
    except WebDriverException, e:
        print "Unable to load profile, retrying"
    else:
        break

答案 2 :(得分:0)

你说加载Firefox经常会失败是非常有趣的,它从来没有发生在我之前。我一直在运行Selenium测试一段时间了。您可能想要调查Firefox驱动程序失败的原因,是否需要更新?

我建议您对重试的时间实施限制。

numberOfRetry = 5
while (driver==None):
    try:
        driver = webdriver.Firefox()
    except:
        numberOfRetry-=1
        if numberOfRetry <= 0:
            logging.critical("Maximum number of retry reached")
            break