Python завершает бесконечный цикл while с исключением из KeyboardInterrupt - PullRequest
5 голосов
/ 27 декабря 2011

Мой цикл 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 Ответ

12 голосов
/ 27 декабря 2011

Замените ваш оператор 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 должны выполняться с повторным появлением «(снова)».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...