Предотвращение случайного перехвата KeyboardInterrupt и SystemExit в Python 2.4 - PullRequest
17 голосов
/ 19 апреля 2010

В сценариях Python во многих случаях прерывание клавиатуры (Ctrl-C) не приводит к завершению процесса из-за голого предложения except где-то в коде:

try:
    foo()
except:
    bar()

Стандартное решение в Python 2.5 или выше состоит в том, чтобы поймать Exception вместо использования простых except предложений:

try:
    foo()
except Exception:
    bar()

Это работает, потому что в Python 2.5 KeyboardInterrupt и SystemExit наследуются от BaseException, а не Exception. Тем не менее, некоторые установки все еще работают на Python 2.4. Как можно решить эту проблему в версиях, предшествующих Python 2.5?

(Я собираюсь ответить на этот вопрос сам, но поставлю его здесь, чтобы люди, ищущие его, могли найти решение.)

1 Ответ

13 голосов
/ 19 апреля 2010

Согласно документации Python , правильный способ справиться с этим в версиях Python более ранних, чем 2.5:

try:
    foo()
except (KeyboardInterrupt, SystemExit):
    raise
except:
    bar()

Это очень многословно, но, по крайней мере, это решение.

...