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.

def proc_exception(self, exc_type, exc_value, traceback):
        """
        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.
        """

        # 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)