Я хочу отловить исключение, которое было вызвано в менеджере контекста. Я создал простой пример для воспроизведения проблемы.
Итак, мой менеджер контекста:
class Test(object):
def div(self, a, b):
return a // b
def __enter__(self):
print('enter')
return self
def __exit__(self, exc_type, exc_val, exc_tb):
print('exit')
return self
И класс, в котором я хочу его использовать:
class Container(object):
def test_exc(self, a, b):
try:
with Test() as test:
try:
result = test.div(a, b)
print(a, '/', b, '=', result)
return result
except Exception as e:
raise e
except Exception as e:
print(e)
Использование:
c = Container()
c.test_exc(5, 1)
c.test_exc(5, 0)
Вывод:
enter
5 / 1 = 5
exit
enter
exit
Таким образом, когда возбуждается исключение (в приведенном выше примере это ZeroDivisionError
), оно не перехватывается родительским try ... catch. Как это исправить?