Python:通过Ctrl + c终止嵌套循环

时间:2018-08-07 07:31:26

标签: python loops sigint keyboardinterrupt

我有一个嵌套有for和while循环的python程序。
我已经读过here有关使用KeyboardInterrupt的知识和here有关使用SIGINT的知识。

我在每个循环中实现了一个try-catch块,并在消息中添加了一条消息和一个动作。确实,我通过抛出异常来尝试通过sys.exit()breakraise显式退出,以便将它们捕获到外部循环中。

所有解决方案均不起作用,并且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循环调用的函数内部。我认为这不是问题。

0 个答案:

没有答案