docs: def exception(self):
      """
      The exception that occured while the job executed. The value is #None if
      no exception occurred.
  
      # Raises
      InvalidState: If the job is #PENDING or #RUNNING.
      """
  
      if self.__state in (Job.PENDING, Job.RUNNING):
        raise self.InvalidState('job is {0}'.format(self.__state))
      elif self.__state == Job.ERROR:
        assert self.__exception is not None
        return self.__exception
      elif self.__state in (Job.RUNNING, Job.SUCCESS, Job.CANCELLED):
        assert self.__exception is None
        return None
      else:
        raise RuntimeError('invalid job state {0!r}'.format(self.__state))