Я пытаюсь обдумать, как написать менеджер контекста, который занимается записью некоторых журналов при обработке любых исключений. Проблема, которую я пытаюсь решить, состоит в том, чтобы сделать код следующим образом:
try:
# code that can raise exception here
except Exception as e:
print('failed', e)
print('all good')
Это повторяющийся шаблон, который у меня есть в коде, и я думаю, что лучше всего его обрабатывать с помощью диспетчера контекста, например:
with my_ctx_manager(success_msg='all good', failed_msg='failed):
# code that can raise exception here
это выглядит намного лучше, но я не знаю, как написать настоящий менеджер контекста, чтобы иметь дело с любыми исключениями, которые могут возникнуть внутри контекста.
@contextlib.contextmanager
def my_ctx_manager(success_msg, failed_msg):
try:
# if no exception then print(success_msg)
# How do I catch any exception here
except Exception:
print(failed_msg)
# I need the exception to propagate as well
raise
Я думаю, мой вопрос больше тип: Как мне убедиться, что менеджер контекста правильно ловит, регистрирует и повторно вызывает любое исключение для кода, который упаковывает?