June 12, 2017
8:29 a.m.
Yury in the comment for PR 2108 [1] suggested more complicated code:
do_something() try: do_something_other() except BaseException as ex: try: undo_something() finally: raise ex
And this is still bad, because it loses the back trace. The way we do it is: do_something() try: do_something_other() except BaseException as ex: tb = sys.exc_info()[2] try: undo_something() finally: raise ex, None, tb