Python: завершить вложенные циклы с помощью Ctrl+c

У меня есть программа на Python с вложенными циклами for и while.
Я уже читал здесь об использовании KeyboardInterrupt и здесь об использовании SIGINT.

Я реализовал блок try-catch внутри каждого цикла с сообщением и действием в исключении. Действительно, я пытался с явным выходом через sys.exit()с break и с raise бросая исключения, чтобы перехватить их во внешнем цикле.

Все решения не работают, и Ctrl+c перехватывается только внешним циклом, внутренние циклы не перехватывают его, т.е. даже если я нажимаю много раз Ctrl+c, полная итерация внутреннего for и несколько итераций while выполнены, прежде чем сломать.

Пример кода

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 ответов

Другие вопросы по тегам