2013-03-06 3 views
48

J'utilise la bibliothèque de demandes et d'accéder à un site Web pour recueillir des données avec le code suivant:- Comment savoir si vous obtenez un 404

r = requests.get(url) 

Je veux ajouter des tests d'erreur lorsqu'une URL incorrecte est entrée et qu'une erreur 404 est renvoyée. Si je rentre volontairement une URL non valide, quand je fais ceci:

print r 

Je reçois ceci:

<Response [404]> 

EDIT:

Je veux savoir comment tester pour cela. Le type d'objet est toujours le même. Quand je fais r.content ou r.text, j'obtiens simplement le HTML d'une page 404 faite sur commande.

+0

Regardez la documentation: http://docs.python-requests.org/en/latest/ La première page indique comment lire r.status_code –

Répondre

110

Regardez le r.status_code attribute:

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 requests soulever 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 scénario booléen. texte; si le code d'état 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:.

Questions connexes