Подтвердить что ты не робот

Избегание случайного заражения KeyboardInterrupt и SystemExit в Python 2.4

В сценариях 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?

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

4b9b3361

Ответ 1

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

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

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