Python,Try、Except语句在X秒后超时?

Ric*_*ick 7 python error-handling timeout

我一直在搜索这个问题,但似乎找不到确切的答案(大多数人都会陷入更复杂的事情,如多线程等),我只想做一些类似 Try, except 语句的事情,如果过程没有完成在 X 秒内它将抛出异常。

编辑:原因是我正在使用网站测试软件(selenium),其配置有时会导致其挂起。它不会抛出错误,不会超时或执行任何操作,因此我无法捕获它。我想知道确定这种情况已经发生的最佳方法是什么,以便我可以继续我的应用程序,所以我在想我是否可以做类似的事情,“如果这在 X 秒内还没有完成......继续” 。

Tho*_*ers 1

答案(和问题)并不特定于 try/ except 语句。如果您想要一个不是无限的无限循环(但在一段时间后停止),它可能不应该是无限的。例如,将其更改为使用:

while time <= some_value:
Run Code Online (Sandbox Code Playgroud)

或者向循环体添加额外的检查,使其在您希望停止时中断:

while True:
    ...
    if time > some_value:
        break
Run Code Online (Sandbox Code Playgroud)

如果这是不可能的(例如,因为您根本无法控制循环),事情就会变得更加困难。在许多系统上,您可以signal.alarm在一段时间后传递信号,然后使用信号处理程序来signal.SIGALRM引发TimeoutError异常。这可能有效,也可能无效,具体取决于无限循环的实际作用;如果它阻止信号,或者捕获并忽略异常,或者以任何其他方式干扰信号处理程序,那么它将不起作用。另一种可能性是不在当前进程中执行循环,而是在单独的进程中执行循环;然后您可以随意终止单独的进程。但是,除了终止它之外,做任何事情都不容易,因此清理或恢复部分工作非常困难。(线程根本无法工作,因为无法中断执行无限循环的单独线程。)