У меня есть несколько менеджеров контекста для проекта, над которым я работаю. Он вот-вот будет отправлен, и я столкнулся с чем-то, из-за чего начинаю паниковать.
У меня сложилось впечатление, что вы не должны повторно вызывать исключения, переданные в качестве аргументов методу __exit__ класса диспетчера контекста. Тем не менее, я проводил некоторое тестирование, и мне показалось, что диспетчер контекста подавлял исключение, которое возникало внутри него. Когда я изменил свои методы __exit__, чтобы они выглядели так:
def __exit__(self, type_, value, trace):
if trace is not None:
print('ERROR IN TRACEBACK: ' + str(value))
# PYTHON 2.7 RAISE SYNTAX:
raise type_, value, trace
ошибки, казалось, прошли правильно.
Мой вопрос: как правильно обрабатывать исключения в методе __exit__, если type_, value и trace не равны None? Плохо ли поднимать (повторно поднимать?) такое исключение? Это то, как я должен это сделать?
Ошибка, с которой я столкнулся, могла быть вызвана чем-то другим. Обычно я бы прошел и проверил все это тщательно, но мое время, кажется, очень ограничено в данный момент. Я надеюсь, что кто-нибудь сможет объяснить правильную реализацию этой функции и
В конечном счете: могу ли я безопасно оставить повышение типа_, значения, трассировки в моих методах __exit__ контекстного менеджера?