code: def _new_err(self, errclass: str, *args) -> 'Err':
          
          # get the message or exception
          ex, msg = self._get_args(*args)
          # construct the error
          # handle exception
          ftb = None  # type: str
          function = None  # type: str
          errtype = None  # type: str
          file = None  # type: str
          line = None  # type: int
          code = None  # type: str
          ex_msg = None  # type: str
          caller = None  # type: str
          caller_msg = None  # type: str
  
          st = inspect.stack()
  
          if ex is not None:
              # get info from exception
              errobj, ex_msg, tb = sys.exc_info()
              tb = traceback.extract_tb(tb)
              file, line, function, code = tb[-1]
              # if called from an external lib
              if len(tb) > 1:
                  file, line, caller, code = tb[0]
              else:
                  call_stack = []
                  for c in st:
                      call_stack.append(c[3])
                  caller = self._get_caller(call_stack, function)
  
              internals = [
                  "err",
                  "_new_err",
                  "fatal",
                  "warning",
                  "debug",
                  "info",
                  "<module>"]  
              if caller == function or caller in internals:
                  caller = None
              # handle messages
              if msg is not None:
                  caller_msg = msg
                  msg = str(ex_msg)
              else:
                  msg = str(ex_msg)
              ftb = traceback.format_exc()
              errtype = errobj.__name__
          if function is None:
              # for el in st:
              #   print(el)
              function = st[3][3]
              if function == "<module>":
                  function = None
          # init error object
          date = datetime.now()
          error = Err(
              function,
              date,
              msg,
              errtype,
              errclass,
              line,
              file,
              code,
              ftb,
              ex,
              caller,
              caller_msg)
          return error
docs: Error constructor