code: def wrap(cls, e, stack_depth=0):
          
          if e == None:
              return Null
          elif isinstance(e, (list, Except)):
              return e
          elif is_data(e):
              e.cause = unwraplist([Except.wrap(c) for c in listwrap(e.cause)])
              return Except(**e)
          else:
              tb = getattr(e, '__traceback__', None)
              if tb is not None:
                  trace = _parse_traceback(tb)
              else:
                  trace = _extract_traceback(0)
  
              cause = Except.wrap(getattr(e, '__cause__', None))
              if hasattr(e, "message") and e.message:
                  output = Except(context=ERROR, template=text_type(e.message), trace=trace, cause=cause)
              else:
                  output = Except(context=ERROR, template=text_type(e), trace=trace, cause=cause)
  
              trace = extract_stack(stack_depth + 2)  # +2 = to remove the caller, and it's call to this' Except.wrap()
              output.trace.extend(trace)
              return output
docs: ENSURE THE STACKTRACE AND CAUSAL CHAIN IS CAPTURED, PLUS ADD FEATURES OF Except
  
          :param e: AN EXCEPTION OF ANY TYPE
          :param stack_depth: HOW MANY CALLS TO TAKE OFF THE TOP OF THE STACK TRACE
          :return: A Except OBJECT OF THE SAME