it-roy-ru.com

Запросы - как узнать, получаете ли вы 404

Я использую библиотеку запросов и обращаюсь к веб-сайту для сбора данных с помощью следующего кода:

r = requests.get(url)

Я хочу добавить проверку ошибок, если введен неправильный URL-адрес и возвращена ошибка 404. Если я намеренно ввожу неверный URL, когда я делаю это:

print r

Я получаю это:

<Response [404]>

Правка:

Я хочу знать, как проверить это. Тип объекта остается прежним. Когда я делаю r.content или r.text, я просто получаю HTML-код пользовательской страницы 404.

90
user1427661

Посмотрите на r.status_code атрибут :

if r.status_code == 404:
    # A 404 was issued.

Демо-версия:

>>> import requests
>>> r = requests.get('http://httpbin.org/status/404')
>>> r.status_code
404

Если вы хотите, чтобы requests вызывал исключение для кодов ошибок (4xx или 5xx), вызовите r.raise_for_status():

>>> r = requests.get('http://httpbin.org/status/404')
>>> r.raise_for_status()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "requests/models.py", line 664, in raise_for_status
    raise http_error
requests.exceptions.HTTPError: 404 Client Error: NOT FOUND
>>> r = requests.get('http://httpbin.org/status/200')
>>> r.raise_for_status()
>>> # no exception raised.

Вы также можете проверить объект ответа в логическом контексте; если код состояния не является кодом ошибки (4xx или 5xx), он считается "верным":

if r:
    # successful response

Если вы хотите быть более явным, используйте if r.ok:.

205
Martijn Pieters