Я пытаюсь написать небольшой менеджер контекста, который будет пытаться выполнить код несколько раз, пока код не будет работать или пока не будет сделано определенное количество попыток. Я попытался написать это, но я встречая трудности с наличием менеджера контекста справиться с проблемами, когда получают:Как менеджер контекстов Python может выполнить код?
Exception RuntimeError: 'generator ignored GeneratorExit'
Как я должен закодировать это?
import contextlib
import random
def main():
with nolube():
print(1/random.randint(0, 1))
@contextlib.contextmanager
def nolube(
tries = None # None: try indefinitely
):
"""
Create a context for trying something repeatedly.
"""
tries_done = 0
rekt = True
if tries is None:
while rekt is True:
try:
yield
rekt = False
except:
tries_done += 1
pass
else:
while rekt is True and tries_done <= tries:
try:
yield
rekt = False
except:
tries_done += 1
pass
if __name__ == "__main__":
main()
Пакет 'retrying' не обновлялся какое-то время. Но есть вилка, называемая [упорство] (https://pypi.python.org/pypi/tenacity), которая поддерживается. – TimB
@TimB: спасибо за хедз-ап, я отредактировал ответ, чтобы рекомендовать упорство. –