Python - try-except 循环 - 将时间延迟作为异常引用
我正在尝试写一个代码,让它在网页加载失败时自动刷新页面。到目前为止,我做了这些:
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机器上是无法工作的。