Reputation: 12535
My question is closely related to How to tell if you're getting a 404.
I'm using the Requests library to hit an HTTP endpoint. I want to check if the response is a success.
I am currently doing this:
r = requests.get(url)
if 200 <= response.status_code <= 299:
# Do something here!
Instead of doing that ugly check for values between 200 and 299, is there a shorthand I can use?
Upvotes: 65
Views: 62691
Reputation: 41
You can do that (only available starting from version 3.12):
HTTPStatus(response.status_code).is_success
Upvotes: 4
Reputation: 13
You could also do:
r = requests.get(url)
if response.status_code // 100 == 2:
# Do something here!
Upvotes: -4
Reputation: 362478
The response has an ok
property. Use that:
if response.ok:
...
The implementation is just a try/except around Response.raise_for_status
, which is itself checks the status code.
@property
def ok(self):
"""Returns True if :attr:`status_code` is less than 400, False if not.
This attribute checks if the status code of the response is between
400 and 600 to see if there was a client error or a server error. If
the status code is between 200 and 400, this will return True. This
is **not** a check to see if the response code is ``200 OK``.
"""
try:
self.raise_for_status()
except HTTPError:
return False
return True
Upvotes: 97
Reputation: 12295
The pythonic way to check for requests success would be to optionally raise an exception with
try:
resp = requests.get(url)
resp.raise_for_status()
except requests.exceptions.HTTPError as err:
print(err)
EAFP: It’s Easier to Ask for Forgiveness than Permission: You should just do what you expect to work and if an exception might be thrown from the operation then catch it and deal with that fact.
Upvotes: 11
Reputation: 1919
I am a Python newbie but I think the easiest way is:
if response.ok:
# whatever
Upvotes: 14