code: def get_rc_exc(rc):
      
  
      try:
          return rc_exc_cache[rc]
      except KeyError:
          pass
  
      if rc > 0:
          name = "ErrorReturnCode_%d" % rc
          base = ErrorReturnCode
      else:
          signame = SIGNAL_MAPPING[abs(rc)]
          name = "SignalException_" + signame
          base = SignalException
  
      exc = ErrorReturnCodeMeta(name, (base,), {"exit_code": rc})
      rc_exc_cache[rc] = exc
      return exc
docs: takes a exit code or negative signal number and produces an exception
      that corresponds to that return code.  positive return codes yield
      ErrorReturnCode exception, negative return codes yield SignalException
  
      we also cache the generated exception so that only one signal of that type
      exists, preserving identity