Далее будут более подробно рассмотрены исключения, генерируемые библиотекой requests в Python.
Ссылка на официальную документацию
requests.RequestException. Базовое исключение, от которого наследуются все остальные исключения. Обеспечивает перехват всех остальных исключений от данной библиотеки.
Частая причина возникновения – ошибки в процессе обработки HTTP-запросов. Пример:
import requests
try:
response = requests.get('https://nonexistentwebsite123456.com')
except requests.RequestException as e:
print('Произошла ошибка: ', str(e))
requests.ConnectionError. Данное исключение возникает, когда явно происходит ошибка соединения, например, если соединение с сервером потеряно.
import requests
try:
response = requests.get('https://nonexistentwebsite123456.com')
except requests.ConnectionError as e:
print('Ошибка соединения: ', str(e))
requests.HTTPError. Данное исключение генерируется, когда сервер присылает ответ с кодом, отличным от набора 2xx. Можно использовать для перехвата и обработки HTTP-ошибок разного типа. К примеру, может возникнуть, если возвращается код 500 или 404.
import requests
try:
response = requests.get('https://httpstat.us/500')
response.raise_for_status()
except requests.HTTPError as e:
print('HTTP ошибка: ', str(e))
requests.TooManyRedirects. Возникает, когда фиксируется большое количество переадресаций. Может возникнуть по причине бесконечного редиректа или когда их количество превышает количество разрешенных.
import requests
try:
response = requests.get('http://httpbin.org/relative-redirect/32', allow_redirects=True,)
except requests.TooManyRedirects as e:
print('Слишком много перенаправлений: ', str(e))
requests.MissingSchema. Исключение возникает, когда в рамках запроса не предоставляется действительный URL. Частая причина возникновения – URL отсутствует или имеет недопустимый формат.
import requests
try:
response = requests.get('')
except requests.exceptions.MissingSchema as e:
print('Требуется URL с указанием схемы: ', str(e))
requests.ConnectTimeout. Генерируется, когда запрос не выполняется по причине тайм-аута. В большинстве случаев исходный запрос можно повторить после определенной паузы, нет необходимости полностью останавливать скрипт.
import requests
try:
response = requests.get('https://httpstat.us/200', timeout=0.001)
except requests.ConnectTimeout as e:
print('Тайм-аут соединения: ', str(e))
requests.ReadTimeout. Это исключение генерируется, когда сервер не отправляет запрошенные данные в отведенное время. Это могут быть проблемы на стороне сервера или нехватка времени ожидания на стороне клиента.
import requests
try:
response = requests.get('https://httpstat.us/200?sleep=5000', timeout=1)
except requests.ReadTimeout as e:
print('Тайм-аут чтения: ', str(e))
requests.Timeout. Общее исключение для тайм-аутов. Будет реагировать на ConnectTimeout и ReadTimeout. Удобно использовать, если логика обработки полностью совпадает.
import requests
try:
response = requests.get('https://httpstat.us/200?sleep=5000', timeout=1)
except requests.Timeout as e:
print('Тайм-аут запроса: ', str(e))
requests.JSONDecodeError. Исключение возникает, когда переданный текст по различным причинам не может быть декодирован в JSON. Обычно происходит, когда сервер возвращает ответ, который не является корректным JSON, но на вход ожидается именно данный формат.
import requests
try:
response = requests.get('https://httpstat.us/200')
data = response.json()
except requests.JSONDecodeError as e:
print('Ошибка декодирования JSON: ', str(e))