Я знаю, що якщо я хочу повторно викликати виняток, я просто використовую 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