Korzystam z biblioteki Requests i uzyskuję dostęp do witryny sieci Web, aby zbierać z niej dane za pomocą następującego kodu:
r = requests.get(url)
Chcę dodać testowanie błędów w przypadku wprowadzenia nieprawidłowego adresu URL i zwrócenia błędu 404. Jeśli celowo wprowadzę nieprawidłowy adres URL, kiedy to zrobię:
print r
Rozumiem:
<Response [404]>
EDYTOWAĆ:
Chcę wiedzieć, jak to sprawdzić. Typ obiektu jest nadal ten sam. Kiedy to robię r.content
lub r.text
, po prostu otrzymuję kod HTML niestandardowej strony 404.
python
python-requests
user1427661
źródło
źródło
Odpowiedzi:
Spójrz na
r.status_code
atrybut :if r.status_code == 404: # A 404 was issued.
Próbny:
>>> import requests >>> r = requests.get('http://httpbin.org/status/404') >>> r.status_code 404
Jeśli chcesz
requests
zgłosić wyjątek dla kodów błędów (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żesz także przetestować obiekt odpowiedzi w kontekście logicznym; jeśli kod statusu nie jest kodem błędu (4xx lub 5xx), jest uważany za „prawdziwy”:
if r: # successful response
Jeśli chcesz być bardziej wyraźny, użyj
if r.ok:
.źródło
.get()
zamiast później wywoływać funkcję.