python завершает бесконечный цикл while с исключением из KeyboardInterrupt
Мой цикл while не завершается при нажатии Ctrl+C. Кажется, он игнорирует мое исключение KeyboardInterrupt. Часть цикла выглядит следующим образом:
while True:
try:
if subprocess_cnt <= max_subprocess:
try:
notifier.process_events()
if notifier.check_events():
notifier.read_events()
except KeyboardInterrupt:
notifier.stop()
break
else:
pass
except (KeyboardInterrupt, SystemExit):
print '\nkeyboardinterrupt found!'
print '\n...Program Stopped Manually!'
raise
Опять же, я не уверен, в чем проблема, но мой терминал даже не печатает два предупреждения о печати, которые у меня есть в моем исключении. Может кто-нибудь помочь мне разобраться с этой проблемой?
1 ответ
Решение
Замените свой break
заявление с raise
утверждение, как показано ниже:
while True:
try:
if subprocess_cnt <= max_subprocess:
try:
notifier.process_events()
if notifier.check_events():
notifier.read_events()
except KeyboardInterrupt:
notifier.stop()
print 'KeyboardInterrupt caught'
raise # the exception is re-raised to be caught by the outer try block
else:
pass
except (KeyboardInterrupt, SystemExit):
print '\nkeyboardinterrupt caught (again)'
print '\n...Program Stopped Manually!'
raise
Два печатных заявления в except
блоки должны выполняться с (снова), появляющимся вторым.