Python - Try-except循环 - 将时间延迟引用为异常

时间:2014-03-30 08:53:10

标签: python selenium try-except

我尝试编写一个try-except循环,如果网页无法加载,则会刷新网页。这是我到目前为止所做的:

driver.get("url")

while True:
    try:
        <operation>
    except:
        driver.refresh()

我想设置这个循环,这样如果5秒钟过去并且没有执行操作(可能是因为页面没有加载),它会尝试刷新页面。我们可以在except中加入一个例外来捕捉时间延迟吗?

1 个答案:

答案 0 :(得分:0)

我建议您阅读这篇文章Timeout function if it takes too long to finish

它的要点是你可以使用信号来中断代码并引发错误,然后你会发现错误。

在你的例子中:

def _handle_timeout(signum,frame):
    raise TimeoutError("Execution timed out")

driver.get("url")
signal.signal(signal.SIGALRM, _handle_timeout)   

while True:
    try:
        signal.alarm(<timeout value>)
        <operation>
        signal.alarm(0) 
    except:
        driver.refresh()

您可以使用以下代码段对此进行测试:

import time
import signal

def _handle_timeout(signum,frame):
    raise TimeoutError("Execution timed out")

def test(timeout,execution_time):
    signal.signal(signal.SIGALRM, _handle_timeout)
    try:
        signal.alarm(timeout)
        time.sleep(execution_time)
        signal.alarm(0)
    except:
        raise
    else:
    print "Executed successfully"

这会在execution_time > timeout时出现错误。

正如Python signal don't work even on Cygwin?中所述,上述代码无法在Windows机器上运行。

相关问题