0

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

driver.get("url")

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

我想设置这个循环,以便如果经过 5 秒并且操作没有执行(可能是因为页面没有加载),它会尝试刷新页面。有没有我们可以合并的例外except来捕获时间延迟?

4

1 回答 1

0

如果完成时间太长,我建议阅读这篇文章Timeout function 。

它的要点是您可以使用信号来中断代码并引发错误,然后您可以捕获该错误。

在你的例子中:

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 信号中所指出的那样,即使在 Cygwin 上也不起作用?上面的代码在 Windows 机器上不起作用。

于 2014-03-30T09:21:18.103 回答