Как продолжить выполнение программы 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-except
  • time.sleep

Там есть довольно удобные настройки - например, можно увеличивать паузу между попытками, можно ограничить число попыток, ловить только определённые исключения, добавлять случайную задержку.

→ Ссылка