docs: def post_mortem(tb=None, host='', port=5555, patch_stdstreams=False):
      """
      Start post-mortem debugging for the provided traceback object
  
      If no traceback is provided the debugger tries to obtain a traceback
      for the last unhandled exception.
  
      Example::
  
          try:
              # Some error-prone code
              assert ham == spam
          except:
              web_pdb.post_mortem()
  
      :param tb: traceback for post-mortem debugging
      :type tb: types.TracebackType
      :param host: web-UI hostname or IP-address
      :type host: str
      :param port: web-UI port. If ``port=-1``, choose a random port value
          between 32768 and 65536.
      :type port: int
      :param patch_stdstreams: redirect all standard input and output
          streams to the web-UI.
      :type patch_stdstreams: bool
      :raises ValueError: if no valid traceback is provided and the Python
          interpreter is not handling any exception
      """
      # handling the default
      if tb is None:
          # sys.exc_info() returns (type, value, traceback) if an exception is
          # being handled, otherwise it returns (None, None, None)
          t, v, tb = sys.exc_info()
          exc_data = traceback.format_exception(t, v, tb)
      else:
          exc_data = traceback.format_tb(tb)
      if tb is None:
          raise ValueError('A valid traceback must be passed if no '
                           'exception is being handled')
      pdb = WebPdb.active_instance
      if pdb is None:
          pdb = WebPdb(host, port, patch_stdstreams)
      else:
          pdb.remove_trace()
      pdb.console.writeline('*** Web-PDB post-mortem ***\n')
      pdb.console.writeline(''.join(exc_data))
      pdb.reset()
      pdb.interaction(None, tb)