Exceptions

Далее будут более подробно рассмотрены исключения, генерируемые библиотекой  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))


Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: