2013-03-06 6 views
48

używam biblioteki życzenia i uzyskiwania dostępu do strony internetowej w celu zebrania danych z niego za pomocą następującego kodu:Wnioski - jak sprawdzić, czy dostajesz 404

r = requests.get(url) 

chcę dodać testowanie błędzie w przypadku wprowadzenia niewłaściwego adresu URL i zwrócenia błędu 404. Gdybym celowo wprowadzony nieprawidłowy adres URL, kiedy to zrobić:

print r 

uzyskać to:

<Response [404]> 

EDIT:

Chcę wiedzieć, jak testować za to. Typ obiektu jest wciąż taki sam. Kiedy robię r.content lub r.text, po prostu otrzymuję kod HTML niestandardowej strony 404.

+0

Zobacz dokumentację: http://docs.python-requests.org/en/latest/ Pierwsza strona zawiera kod r.status_code –

Odpowiedz

110

Spójrz na 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 

Jeśli chcesz requests podnieść wyjątek dla kodów błędu (4xx lub 5xx), zadzwoń 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. 

Można również przetestować obiekt odpowiedzi w konfiguracji logicznej tekst; Jeśli kod stanu nie jest kod błędu (4xx lub 5xx), uważa się za „prawdziwy”:

if r: 
    # successful response 

Jeśli chcesz być bardziej wyraźne, użyj if r.ok:.