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. Я не думаю, что это проблема.