Я знаю, что если я хочу повторно вызвать исключение, я просто использую raise
без аргументов в соответствующем except
блоке. Но учитывая вложенное выражение вроде
try:
something()
except SomeError as e:
try:
plan_B()
except AlsoFailsError:
raise e # I'd like to raise the SomeError as if plan_B()
# didn't raise the AlsoFailsError
как я могу повторно поднять SomeError
без нарушения трассировки стека? raise
одна только в этом случае повторно повысит более недавний AlsoFailsError
. Или как мне провести рефакторинг кода, чтобы избежать этой проблемы?
plan_B
другую функцию, которая возвращаетсяTrue
в случае успеха илиFalse
исключения? Тогда внешнийexcept
блок мог быть простоif not try_plan_B(): raise