@egorzenit

Как вызвать exception еще раз после его срабатывания?

необходимо выполнять запросы к одному сайту но проблема в том что это Китай и соединение с сайтом дропается 3-4 раза из 10 запросов.

Думал решить проблему хэндлигом эксепшена через Except, но проблема в том, что бывает экспешен срабатывает во второй раз и тогда Except уже не ловит его и код улетает в raise и крашится.

Как решить эту проблему правильно?

Сейчас придумал ввести переменную и использование while not, но думаю что это не лучшее решение, помогайте :(

Кусок кода:
HaveFlightTickets = False
        while not HaveDates:
            try:
                submit = requests.post(Китай).json()
                while (submit['success'] == False):
                    if магия

                    elif магия

            except requests.exceptions.ConnectionError:
                submit = requests.post(Китай)
                continue
  • Вопрос задан
  • 94 просмотра
Решения вопроса 2
shurshur
@shurshur
Сисадмин, просто сисадмин...
Зачем так сложно? Делаем цикл по числу попыток, как только получаем успешный результат - делаем break и завершаем цикл досрочно. Можно даже обернуть это в функцию, тогда в основном коде не будет всей этой магии с циклом, код будет выглядеть более наглядным.

def get_data(Китай, max_attempts=MAX_ATTEMPTS_DEFAULT):
    for attempt in range(1, max_attempts+1):
        try:
            submit = requests.post(Китай).json()
        except requests.exceptions.ConnectionError:
            continue
        if submit['success']:
            return submit
    return {'success':false, 'error':'attempts exceeded'}
Ответ написан
Комментировать
phaggi
@phaggi Куратор тега Python
лужу, паяю, ЭВМы починяю
Если не хотите while, оберните свой try/except в функцию и сделайте из ветки исключения рекурсивный вызов. Но я бы, возможно, выбрал while.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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