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