def __exit__(self, exc_type, exc_value, traceback):
undoExcInfo = None<EOL>for undo, args, kwargs in self._finally:<EOL><INDENT>try:<EOL><INDENT>undo(*args, **kwargs)<EOL><DEDENT>except Exception:<EOL><INDENT>if undoExcInfo is None:<EOL><INDENT>undoExcInfo = sys.exc_info()<EOL><DEDENT><DEDENT><DEDENT>if exc_type is None and undoExcInfo is not None:<EOL><INDENT>raise undoExcInfo[<NUM_LIT:0>](undoExcInfo[<NUM_LIT:1>]).with_traceback(undoExcInfo[<NUM_LIT:2>])<EOL><DEDENT>
If this function doesn't return True (or raises a different
exception), python re-raises the original exception once this
function is finished.