Как регистрировать все исключения в python 3

Есть много исключений, которые я не хочу перехватывать, я хочу, чтобы они прекратили обработку, но мне все еще нужна трассировка стека в файле журнала. Есть ли способ настроить регистратор, чтобы он автоматически регистрировал все исключения?

Сейчас я часто пишу такие вещи:

try:
  blah
except:
  logging.exception('doing blah')
  raise

которые занимают много времени и места + он будет регистрировать только исключения, для которых у меня есть предложение try, а не другие.

Спасибо.


person Yves Dorfsman    schedule 04.07.2012    source источник


Ответы (2)


Вы можете использовать декораторы, чтобы обернуть отдельные функции и методы кодом, который регистрирует любое неперехваченное исключение.

Это означает одну дополнительную строку кода перед определением любой функции, которая должна вести журнал. Преимущество: можно быстро добавлять и удалять.

Декоратор также может получить аргументы. Например, вы можете указать базовый класс тех исключений, которые вы хотите регистрировать.

Вот основной вопрос и краткий ответ о том, как писать декораторы.

person cfi    schedule 05.07.2012

Вы можете поместить обработчик всего на самый верхний уровень вашего кода:

try:
  everything
except:
  logging.exception('unhandled')
  raise
person jfs    schedule 04.07.2012
comment
Танки, но я прыгал за чем-то, что я мог бы установить в модуле, где я строю свой регистратор, так как я импортирую этот модуль во все свои программы. - person Yves Dorfsman; 05.07.2012