@Evgeny_A

Как повторно вызвать функцию, если рекурсия не вариант?

Приветствую.

Пытаюсь понять как переписать кусок кода, чтобы работало предсказуемо. Значит у меня есть функция, которая делает запрос с помощью requests. Часто запрос не удается, если не правильно указан протокол (http или https). Я заранее знать правильный протокол не могу, поэтому если вызывается исключение, то я делаю еще одну попытку тупо заменяя https на http или http на https. Вот код функции:

def makeRequestsGet(url, attempt=1):

	if attempt <= 2:

		try:

			response = requests.get(url, headers=headers, verify=False, timeout=30)
			response.close()

			return response

		except ConnectionError as e:

			if url.find('https') != -1:

				url = url.replace('https', 'http')

			else:

				url = url.replace('http', 'https')

			makeRequestsGet(url, attempt=attempt+1)

	else:

		return False

Проблема появляется, когда я эту функцию вызываю где либо и в случае если первая попытка запроса заканчивается ошибкой из за неправильного протокола. Тогда происходит следующее:

  1. Вызываю функцию makeRequestsGet
  2. Протокол не корректный, возвращается None
  3. Скрипт выполняется дальше, потому что None тоже результат
  4. Выполняется вторая попытка makeRequestsGet
  5. Приходит нормальный ответ с результатами запроса
  6. Но он уже никому не нужен, потому что уже был None

не могу понять, как переписать функцию, чтобы скрипт не выполнялся, пока не будет совершена вторая попытка запроса при условии, что первая была не удачной. Подскажите, как в этом случае размышлять.
  • Вопрос задан
  • 464 просмотра
Решения вопроса 1
@o5a
Не совсем понял требования насчет рекурсии. Но данный скрипт можно исправить, добавив return:
return makeRequestsGet(url, attempt=attempt+1)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы