Подтвердить что ты не робот

Python запрашивает обработку исключений

Как обрабатывать исключения с запросами библиотеки python? Например, как проверить, подключен ли компьютер к Интернету?

Когда я пытаюсь

try:
    requests.get('http://www.google.com')
except ConnectionError:
    # handle the exception

это дает мне имя ошибки ConnectionError не определено

4b9b3361

Ответ 1

Предполагая, что вы сделали import requests, вы хотите requests.ConnectionError. ConnectionError является исключением, определенным requests. См. документацию по API здесь.

Таким образом, код должен быть:

try:
   requests.get('http://www.google.com')
except requests.ConnectionError:
   # handle the exception

Ответ 2

для ясности, то есть

except requests.ConnectionError:

НЕ

import requests.ConnectionError

 

Вы также можете получить общее исключение (хотя это не рекомендуется) с помощью

except Exception:

Ответ 3

На самом деле, существует гораздо больше исключений, которые может генерировать requests.get(), чем просто ConnectionError. Вот некоторые, которые я видел в производстве:

from requests import ReadTimeout, ConnectTimeout, HTTPError, Timeout, ConnectionError

try:
    r = requests.get(url, timeout=6.0)
except (ConnectTimeout, HTTPError, ReadTimeout, Timeout, ConnectionError):
    continue

Ответ 4

Включите модуль запросов, используя import requests.

Всегда полезно реализовать обработку исключений. Это не только помогает избежать неожиданного выхода из скрипта, но также может помочь регистрировать ошибки и информационные уведомления. При использовании запросов Python я предпочитаю ловить исключения вроде этого:

try:
    res = requests.get(adress,timeout=30)
except requests.ConnectionError as e:
    print("OOPS!! Connection Error. Make sure you are connected to Internet. Technical Details given below.\n")
    print(str(e))            
    continue
except requests.Timeout as e:
    print("OOPS!! Timeout Error")
    print(str(e))
    continue
except requests.RequestException as e:
    print("OOPS!! General Error")
    print(str(e))
    continue
except KeyboardInterrupt:
    print("Someone closed the program")

Ответ 5

В соответствии с документацией, я добавил следующие пункты: -

  1. В случае проблем с сетью (отказ в соединении, например, из-за проблем с Интернетом), запросы вызывают исключение ConnectionError.

    try:
       requests.get('http://www.google.com')
    except requests.ConnectionError:
       # handle ConnectionError the exception
    
  2. В случае редкого неверного HTTP-ответа Requests вызовет исключение HTTPError. Response.raise_for_status() вызовет HTTPError, если HTTP-запрос вернул неудачный код состояния.

    try:
       r = requests.get('http://www.google.com/nowhere')
       r.raise_for_status()
    except requests.exceptions.HTTPError as err:
       #handle the HTTPError request here
    
  3. В случае превышения времени запроса возникает исключение тайм-аута.

    Вы можете указать Requests прекратить ждать ответа через определенное количество секунд с аргументом timeout.

    requests.get('https://github.com/', timeout=0.001)
    # timeout is not a time limit on the entire response download; rather, 
    # an exception is raised if the server has not issued a response for
    # timeout seconds
    
  4. Все исключения, которые явно запрашивает Requests, наследуются от request.exceptions.RequestException. Таким образом, базовый обработчик может выглядеть следующим образом,

    try:
       r = requests.get(url)
    except requests.exceptions.RequestException as e:
       # handle all the errors here