Использование упорства (модуль 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 и как это должно работать.
- Является
Retrying(stop=stop_after_attempt(3))
здесь должен быть список? Если да, то как выглядит этот список? -
with attempt:
Что это значит? - что
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
Да, я знаю, что приведенный выше синтаксис недействителен, но он иллюстрирует желаемый эффект.