Image

Retry in recursion

Добрый день, уважаемое сообщество.

Решил поделиться с Вами своим "велосипедным" открытием и, в то же время, уточнить, насколько это безопасно, логично и рационаьно.

Суть задачи: имеется цикл, в теле которого происходит какой-либо запрос (пусть будет сетевой), который имеет свойство прерываться в связи с нестабильным соединением. Задача состоит в том, чтобы не прерывая исполнения кода, выполнить любое возможное количество повторных запросов, пока один из них не будет успешным.

Стандартное решение: обычно организуется вложенный цикл, в котором проверяется состояние, либо отлавливаются исключения и в соответствии с результатом запрос зацикливается, либо продолжается нормальное исполнение кода.

Моё решение: вместо организации вложенного цикла, определяется функция, в которой происходит запрос и в ней же проверяется состояние этого запроса. Если состояние неудовлетворительное - функция вызывается рекурсивно.

Пример:

def retrieve(something):
    data = get_data(something)

    if not data:
        data = retrieve(something)

    return data


Любой контроль можно добавить, как и в случае с вложенным циклом.
Однако, возвращаясь к моему вопросу, покритикуйте, плох ли этот метод и чем он хуже обычного цикла?