Обработка ошибок try/except в python

Хочу добавить обработку ошибок для запросов, но при ошибках типа 502 или 404 не срабатывает except и дальше продолжается цикл(Одна из ссылок с ошибкой, чтоб проверить выполнение кода). Причина в прокси, если его убрать то работает как надо, как это исправить и почему так себя ведет код?

list = ['http://bugmenot.com/' , 'http://bugmenot.comcom/']

def getDataSync(link, retry=5):
   
    try:
        r = requests.get(link, headers=settings.HEADERS , proxies=settings.PROXIES)
        print(r)
    except Exception as ex:
       
        if retry:
            print('[ERROR] Неудачная попытка запроса')
            time.sleep(5)
            return getDataSync(link, retry=(retry - 1))
        else:
            print('Попытки закончились')

    soup = BeautifulSoup(r.content, 'html.parser')
    return soup



def main():
    
    for link in list:
        getDataSync(link)
    print("Finished")

Вывод с прокси:

http://bugmenot.com/
409
http://bugmenot.comcom/
502
Finished

Без прокси:

[ERROR] Неудачная попытка запроса
[ERROR] Неудачная попытка запроса
[ERROR] Неудачная попытка запроса
[ERROR] Неудачная попытка запроса
[ERROR] Неудачная попытка запроса
Попытки закончились
#дальше еще куча ошибок, но это понятное поведение

Ответы (1 шт):

Автор решения: gil9red

Используйте функцию Response.raise_for_status:

r = requests.get(link, headers=settings.HEADERS , proxies=settings.PROXIES)
print(r)
r.raise_for_status()

Она выбросит исключение при статусах 4xx или 5xx

→ Ссылка