gpt4 book ai didi

python - 如何编写异常无法中断的无限循环?

转载 作者:太空宇宙 更新时间:2023-11-03 15:10:01 25 4
gpt4 key购买 nike

是否可以编写一个无限循环,即使在循环体的执行之间发生异常也无法跳出异常?如果是这样,如何? (这些是我在考虑稳健性时想到的一些愚蠢的事情。)

例如,考虑以下代码:

import time

def slow_true():
print 'waiting to return True...'
time.sleep(1.0)
return True

while slow_true():
try:
print 'in loop body'
raise RuntimeError('testing')
except:
print 'caught exception, continuing...'
continue

当 Python 正在执行 slow_true() 时,我可以使用 Ctrl-C 轻松地跳出循环。即使我将 while slow_true(): 替换为 while True: 理论上也有一个小的时间窗口(在主体执行之间),其中 SIGINT 可以导致脚本退出。

我意识到我可以实现一个 SIGINT 处理程序来有效地禁用 Ctrl-C,但这不是这个问题的重点。

我可以用另一个无限循环来包装循环,并将 try/except 移出一个级别,如下所示:

import time

def slow_true():
print 'waiting to return True...'
time.sleep(1.0)
return True

while True:
try:
while slow_true():
print 'in loop body'
raise RuntimeError('testing')
except:
print 'caught exception, restarting...'
continue
break

这将使跳出循环变得更加困难(必须在正确的时间连续引发两个异常),但我认为这在理论上仍然是可能的。

最佳答案

一个绝对不推荐的选项是覆盖 excepthook 方法。

import sys

def exception_hook(exception_type, value, traceback):
your_loop_function()

sys.excepthook = exception_hook

使用信号的替代解决方案(不太坏):

import signal

def interrupt(signal, frame):
your_loop_function()

signal.signal(signal.SIGINT, interrupt)

关于python - 如何编写异常无法中断的无限循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28015653/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com