我正在尝试编写一个 try-except 循环,如果它无法加载,它会刷新网页。这是我到目前为止所做的:
driver.get("url")
while True:
try:
<operation>
except:
driver.refresh()
我想设置这个循环,以便如果经过 5 秒并且操作没有执行(可能是因为页面没有加载),它会尝试刷新页面。有没有我们可以合并的例外except
来捕获时间延迟?
我正在尝试编写一个 try-except 循环,如果它无法加载,它会刷新网页。这是我到目前为止所做的:
driver.get("url")
while True:
try:
<operation>
except:
driver.refresh()
我想设置这个循环,以便如果经过 5 秒并且操作没有执行(可能是因为页面没有加载),它会尝试刷新页面。有没有我们可以合并的例外except
来捕获时间延迟?
如果完成时间太长,我建议阅读这篇文章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 机器上不起作用。