Estoy usando la biblioteca de Solicitudes y accediendo a un sitio web para recopilar datos con el siguiente código:
r = requests.get(url)
Quiero agregar una prueba de error para cuando se ingresa una URL incorrecta y se devuelve un error 404. Si ingreso intencionalmente una URL no válida, cuando hago esto:
print r
Entiendo esto:
<Response [404]>
EDITAR:
Quiero saber cómo probar eso. El tipo de objeto sigue siendo el mismo. Cuando lo hago r.content
o r.text
simplemente obtengo el HTML de una página 404 personalizada.
mira el r.status_code
atributo:
if r.status_code == 404:
# A 404 was issued.
Manifestación:
>>> import requests
>>> r = requests.get('http://httpbin.org/status/404')
>>> r.status_code
404
Si tu quieres requests
para generar una excepción para los códigos de error (4xx o 5xx), llame 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.
También puede probar el objeto de respuesta en un contexto booleano; si el código de estado no es un código de error (4xx o 5xx), se considera “verdadero”:
if r:
# successful response
Si quieres ser más explícito, usa if r.ok:
.
Si su solicitud se realiza dentro de otra función, pero desea detectar el error en un nivel superior, es bueno saber que también puede obtener el código de estado directamente de la excepción. En mi caso, no pude acceder a la respuesta ya que se generó HTTPError antes de que mi función pudiera transmitir la respuesta. Terminé haciendo lo siguiente:
try:
r = function_calling_request(the_request)
except HTTPError as e:
if e.response.status_code == 404:
return do_stuff_if_not_found()
Mira la documentación: docs.python-requests.org/en/latest La primera página dice mirar r.status_code
–Udo Klein
06/03/2013 a las 21:50