Как продолжить выполнение программы Python при ошибке в цикле FOR?
Нужно, чтобы при любой ошибке в любой из функций - выждать 5 сек и продолжить выполнение, не переходя на следующий цикл, с тем же ftid. Сейчас, в случае ошибки, будет пропуск отработки функций с этим ftid. Как сделать максимально правильно.
for ftid in range(begin_ftid, end_ftid):
try:
f1(ftid)
f2(ftid)
f3(ftid)
except Exception:
time.sleep(5)
pass
Ответы (2 шт):
Автор решения: Kers
→ Ссылка
Простой вариант так сказать:
for ftid in range(10):
b = True
while b: #Повторять пока b = True
try:
f1(ftid)
f2(ftid)
f3(ftid)
b = False # если все хорошо прерываем цикл while
except Exception: # иначе выполнится исключение и b останется True
time.sleep(1)
pass
Автор решения: CrazyElf
→ Ссылка
Для таких вещей есть удобные декораторы, например retry. Правда, придётся описать ещё одну функцию, чтобы использовать декоратор:
@retry(delay=5)
def f123(ftid):
f1(ftid)
f2(ftid)
f3(ftid)
for ftid in range(begin_ftid, end_ftid):
f123(ftid)
Таким образом, за счёт использования декоратора мы убрали из кода:
- цикл
while try-excepttime.sleep
Там есть довольно удобные настройки - например, можно увеличивать паузу между попытками, можно ограничить число попыток, ловить только определённые исключения, добавлять случайную задержку.