docs: def exception_handler_v20(status_code, error_content):
      """Exception handler for API v2.0 client.
  
      This routine generates the appropriate Neutron exception according to
      the contents of the response body.
  
      :param status_code: HTTP error status code
      :param error_content: deserialized body of error response
      """
      error_dict = None
      request_ids = error_content.request_ids
      if isinstance(error_content, dict):
          error_dict = error_content.get('NeutronError')
      # Find real error type
      client_exc = None
      if error_dict:
          # If Neutron key is found, it will definitely contain
          # a 'message' and 'type' keys?
          try:
              error_type = error_dict['type']
              error_message = error_dict['message']
              if error_dict['detail']:
                  error_message += "\n" + error_dict['detail']
              # If corresponding exception is defined, use it.
              client_exc = getattr(exceptions, '%sClient' % error_type, None)
          except Exception:
              error_message = "%s" % error_dict
      else:
          error_message = None
          if isinstance(error_content, dict):
              error_message = error_content.get('message')
          if not error_message:
              # If we end up here the exception was not a neutron error
              error_message = "%s-%s" % (status_code, error_content)
  
      # If an exception corresponding to the error type is not found,
      # look up per status-code client exception.
      if not client_exc:
          client_exc = exceptions.HTTP_EXCEPTION_MAP.get(status_code)
      # If there is no exception per status-code,
      # Use NeutronClientException as fallback.
      if not client_exc:
          client_exc = exceptions.NeutronClientException
  
      raise client_exc(message=error_message,
                       status_code=status_code,
                       request_ids=request_ids)