2013-03-06 1 views
48

Sto utilizzando la libreria Le richieste e l'accesso a un sito web per raccogliere dati da esso con il seguente codice:Le richieste - Come sapere se stai ricevendo un 404

r = requests.get(url) 

voglio aggiungere test errore per quando viene inserito un URL improprio e viene restituito un errore 404. Se ho intenzionalmente entro in un URL non valido, quando faccio questo:

print r 

ottengo questo:

<Response [404]> 

EDIT:

Voglio sapere come prova per questo. Il tipo di oggetto è sempre lo stesso. Quando faccio r.content o r.text, ottengo semplicemente l'HTML di una pagina 404 personalizzata.

+0

Guarda la documentazione: http://docs.python-requests.org/en/latest/ La prima pagina afferma di r.status_code –

risposta

110

sguardo al r.status_code attribute:

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

Demo:

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

Se si desidera requests a sollevare un'eccezione per i codici di errore (4xx o 5xx), chiamare 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. 

È inoltre possibile testare l'oggetto risposta in una truffa booleana testo; se il codice di stato non è un codice di errore (4xx o 5xx), è considerato ‘vera’:

if r: 
    # successful response 

Se si vuole essere più esplicito, utilizzare if r.ok:.