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.
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:
.