Обработка ошибки при обращению к серверу
Использую библиотеку requests для обращения к серверу и присваиваю переменной определенный скачанный элемент со страницы.
r = requests.get('http://...')
Проблема в том, что сервер нестабилен, и в определенный момент он может быть выключен, из-за чего программа падает. Моей задачей является добавить обработку ошибки, при которой сервер не дает ответа. Например, выражаясь более простым языком - вывести в консоль "Ошибка" если ответа от сервера не последовало, либо просто продолжить исполнение программы в случае ответа сервера.
Ответы (1 шт):
Во-первых, как уже подсказали, изучите в принципе тему ошибок и исключений в Питоне. Затем можно смотреть конкретные исключения, специфические для модуля requests. Обрабатывать их можно например так:
try:
r = requests.get(url, params={'s': thing})
# Обработать ответ
except requests.exceptions.Timeout:
# Вероятно сервер болеет, можно попробовать ретрай через N секунд
except requests.exceptions.TooManyRedirects:
# Вероятно некорректный URL
except requests.ConnectionError:
# Нет соединения с сервером
Полезные материалы:
- enSO: Correct way to try/except using Python requests module?
- enSO: Python requests exception handling
- requests.readthedocs.io: Exceptions – здесь полный список исключений библиотеки
requests.
Для построения более грамотной обработки подобных ситуаций, можно использовать специальные модули вроде retry retrying, которые позволяют в декларативном виде через декораторы задавать правила обработки исключений – повторения запросов, их количество, интервалы между повторами и т.п.