for _ in range(5):
try:
# replace this with something that may fail
raise ValueError("foo")
# replace Exception with a more specific exception
except Exception as e:
err = e
continue
# no exception, continue remainder of code
else:
break
# did not break the for loop, therefore all attempts
# raised an exception
else:
raise err
Моя версия похожа на некоторые из вышеперечисленных, но не использует отдельный цикл while
и повторно вызывает последнее исключение, если все попытки повторяются. Можно явно установить err = None
наверху, но это не является строго необходимым, поскольку он должен выполнить только последний блок else
, если произошла ошибка и, следовательно, err
установлено.