web-dev-qa-db-fra.com

Demandes - comment savoir si vous obtenez un 404

J'utilise la bibliothèque Requests et j'accède à un site Web pour recueillir des données à l'aide du code suivant:

r = requests.get(url)

Je souhaite ajouter un test d'erreur pour le cas où une URL incorrecte est entrée et une erreur 404 renvoyée. Si j'entre intentionnellement une URL invalide, quand je fais ceci:

print r

J'ai compris:

<Response [404]>

MODIFIER:

Je veux savoir comment tester cela. Le type d'objet est toujours le même. Quand je fais r.content ou r.text, je récupère simplement le code HTML d'une page 404 personnalisée.

95
user1427661

Regardez le r.status_code attribut :

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

Démo:

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

Si vous voulez que requests lève une exception pour les codes d'erreur (4xx ou 5xx), appelez 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.

Vous pouvez également tester l'objet de réponse dans un contexte booléen. si le code de statut n’est pas un code d’erreur (4xx ou 5xx), il est considéré comme "vrai":

if r:
    # successful response

Si vous voulez être plus explicite, utilisez if r.ok:.

220
Martijn Pieters