code: def proc_exception(self, exc_type, exc_value, traceback):
          
  
          # If we're empty, bail out early
          if not self:
              return
  
          for idx in range(len(self), -1, -1):
              # First, process the response...
              if hasattr(exc_value, 'response'):
                  _safe_call(self[idx], 'proc_response', exc_value.response)
  
              resp = _safe_call(self[idx], 'proc_exception',
                                exc_type, exc_value, traceback)
  
              # If we have a response, finish processing and return it
              if resp:
                  return self.proc_response(resp, idx - 1)
docs: Post-process an exception through all processors in the stack,
          in reverse order.  The exception so post-processed is any
          exception raised by the Request object's proc_response()
          method; if the httplib2.Http raises an exception, that
          exception will not be processed by this mechanism.
  
          Exception processors may return a response object to preempt
          exception processing.  The response object will be
          post-processed with the proc_response() method on the
          remaining processors in the stack.
  
          Note that, if the exception has a 'response' attribute, each
          processor's proc_response() method will be called on it prior
          to calling proc_exception().
  
          The return value will be None if the exception was not
          handled, or a response object returned by one of the
          processors.