Python запрашивает обработку исключений
Как обрабатывать исключения с запросами библиотеки python?
Например, как проверить, подключен ли компьютер к Интернету?
Когда я пытаюсь
try:
requests.get('http://www.google.com')
except ConnectionError:
# handle the exception
это дает мне имя ошибки ConnectionError
не определено
Ответы
Ответ 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
В соответствии с документацией, я добавил следующие пункты: -
В случае проблем с сетью (отказ в соединении, например, из-за проблем с Интернетом), запросы вызывают исключение ConnectionError.
try:
requests.get('http://www.google.com')
except requests.ConnectionError:
# handle ConnectionError the exception
В случае редкого неверного 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
В случае превышения времени запроса возникает исключение тайм-аута.
Вы можете указать 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
Все исключения, которые явно запрашивает Requests, наследуются от request.exceptions.RequestException. Таким образом, базовый обработчик может выглядеть следующим образом,
try:
r = requests.get(url)
except requests.exceptions.RequestException as e:
# handle all the errors here