我有一个嵌套有for和while循环的python程序。
我已经读过here有关使用KeyboardInterrupt的知识和here有关使用SIGINT的知识。
我在每个循环中实现了一个try-catch块,并在消息中添加了一条消息和一个动作。确实,我通过抛出异常来尝试通过sys.exit()
,break
和raise
显式退出,以便将它们捕获到外部循环中。
所有解决方案均不起作用,并且Ctrl + c仅被外部循环捕获,内部循环不捕获它,即,即使我按了Ctrl + c多次,内部for和多次迭代的完整迭代在休息之前执行。
示例代码
import signal
signal.signal(signal.SIGINT, signal.default_int_handler)
for i in range(0,M):
try:
# do something
for j in range(0,N):
try:
# do something
while(P > 0):
try:
P-=1
# do something
except KeyboardInterrupt:
print("while loop exiting via Ctrl+c")
sys.exit(1) # break or raise
except KeyboardInterrupt:
print("inner foor loop exiting via Ctrl+c")
sys.exit(1) # break or raise
except KeyboardInterrupt:
print("outer for loop exiting via Ctrl+c")
sys.exit(1) # break or raise
您有什么建议吗?
编辑: 我忘了说while循环位于内部for循环调用的函数内部。我认为这不是问题。