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

0 投票
1 回答
2571 浏览
提问于 2025-04-18 00:32

我正在尝试写一个代码,让它在网页加载失败时自动刷新页面。到目前为止,我做了这些:

driver.get("url")

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

我想设置一个循环,如果过了5秒操作还没有完成(可能是因为页面没有加载),它就会尝试刷新页面。请问在except里有没有什么方法可以捕捉到这个时间延迟的情况呢?

1 个回答

0

我建议你看看这篇文章 如果执行时间太长,如何设置超时函数

简单来说,你可以用信号来中断代码的执行,并抛出一个错误,然后你可以捕捉到这个错误。

在你的例子中:

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机器上是无法工作的。

撰写回答