Я знаю, що якщо я хочу повторно викликати виняток, я просто використовую 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
. Або як я міг зробити рефакторинг коду, щоб уникнути цієї проблеми?
arg
і я спробував би зателефонувати, arg.plan_B()
що може викликати AttributeError
через arg
не надання плану Б
plan_B
підняти винятки
plan_B
іншу функцію, яка повертаєTrue
успіх іFalse
виняток? Тоді зовнішнійexcept
блок міг бути простоif not try_plan_B(): raise