docs: def exception(self, timeout=None):
          """Return a exception raised by the call that the future
          represents.
          :param timeout: The number of seconds to wait for the exception
              if the future has not been completed. None, the default,
              sets no limit.
          :returns: The exception raised by the call that the future
              represents or None if the call completed without raising.
          :raises: TimeoutError: If the timeout is reached before the
              future ends execution.
          """
          # with self.__condition:
          if self.__state == FINISHED:
              return self.__exception
  
          self.__condition.wait(timeout)
  
          if self.__state == FINISHED:
              return self.__exception
          else:
              raise TimeoutError('Future: %r' % self.__method)