Избегание случайного заражения 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?
(Я сам отвечу на этот вопрос, но поставлю его здесь, чтобы люди, которые его искали, могли найти решение.)
Ответы
Ответ 1
Согласно документации Python, правильный способ справиться с этим в версиях Python до версии 2.5:
try:
foo()
except (KeyboardInterrupt, SystemExit):
raise
except:
bar()
Это очень многословие, но по крайней мере это решение.