Использование упорства (модуль Python): повторная попытка блока кода без определения

Из https://tenacity.readthedocs.io/en/latest/#retrying-code-block

«Tenacity позволяет вам повторить блок кода без необходимости оборачивать его в изолированную функцию. Это позволяет легко изолировать сбойный блок при совместном использовании контекста. Хитрость заключается в объединении цикла for и диспетчера контекста».

      from tenacity import Retrying, RetryError, stop_after_attempt

try:
    for attempt in Retrying(stop=stop_after_attempt(3)):
        with attempt:
            raise Exception('My code is failing!')
except RetryError:
    pass

Я не понимаю, какое значение здесь имеет цикл for и как это должно работать.

  1. ЯвляетсяRetrying(stop=stop_after_attempt(3))здесь должен быть список? Если да, то как выглядит этот список?
  2. with attempt:Что это значит?
  3. чтоRetryErrorдолжно быть?

Я заинтересован в применении повторной попытки к любому заданному блоку кода:@retry(wait=wait_fixed(2), stop=stop_after_attempt(5))но похоже, что это можно поставить только перед деф. Как бы я применил эту повторную попытку к блоку кода:

      @retry(wait=wait_fixed(2), stop=stop_after_attempt(5)):
    # a block of code

Да, я знаю, что приведенный выше синтаксис недействителен, но он иллюстрирует желаемый эффект.

0 ответов

Другие вопросы по тегам