code: def handle_run_exception(self, pipeline_key, pipeline_func, e):
      
      if isinstance(e, Retry):
        retry_message = str(e)
        logging.warning('User forced retry for pipeline ID "%s" of %r: %s',
                        pipeline_key.name(), pipeline_func, retry_message)
        self.transition_retry(pipeline_key, retry_message)
      elif isinstance(e, Abort):
        abort_message = str(e)
        logging.warning('User forced abort for pipeline ID "%s" of %r: %s',
                        pipeline_key.name(), pipeline_func, abort_message)
        pipeline_func.abort(abort_message)
      else:
        retry_message = '%s: %s' % (e.__class__.__name__, str(e))
        logging.exception('Generator %r#%s raised exception. %s',
                          pipeline_func, pipeline_key.name(), retry_message)
        self.transition_retry(pipeline_key, retry_message)
  
      return pipeline_func.task_retry
docs: Handles an exception raised by a Pipeline's user code.
  
      Args:
        pipeline_key: The pipeline that raised the error.
        pipeline_func: The class path name of the Pipeline that was running.
        e: The exception that was raised.
  
      Returns:
        True if the exception should be re-raised up through the calling stack
        by the caller of this method.