Предотвращение случайно ловли 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?

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

17
задан jrdioko 19 April 2010 в 18:09
поделиться

1 ответ

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

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

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

13
ответ дан 30 November 2019 в 14:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: