8

I am creating a download service using the python requests library (See here) to download data from another server. The problem is that sometimes I get a 503 error and I need to display an appropriate message. See sample code below:

import requests
s = requests.Session()
response = s.get('http://mycustomserver.org/download')

I can check from response.status_code and get the status code = 200. But how do I try/catch for a specific error, in this case, I want to be able to detect 503 error and handle them appropriately.

How do I do that?

1

2 Answers 2

15

Why not do

class MyException(Exception);
   def __init__(self, error_code, error_msg):
       self.error_code = error_code
       self.error_msg = error_msg

import requests
s = requests.Session()
response = s.get('http://mycustomserver.org/download')

if response.status_code == 503:
    raise MyException(503, "503 error code")

Edit:

It seems that requests library will also raise an Exception for you using response.raise_for_status()

>>> import requests
>>> requests.get('https://google.com/admin')
<Response [404]>
>>> response = requests.get('https://google.com/admin')
>>> response.raise_for_status()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.7/dist-packages/requests/models.py", line 638, in raise_for_status
    raise http_error
requests.exceptions.HTTPError: 404 Client Error: Not Found

Edit2:

Wrap you raise_for_status with the following try/except

try:
    if response.status_code == 503:
        response.raise_for_status()
except requests.exceptions.HTTPError as e: 
    if e.response.status_code == 503:
        #handle your 503 specific error
Sign up to request clarification or add additional context in comments.

4 Comments

I was looking at Errors and Exceptions part and wondering which will enable me to catch the 503 error. Thanks though.
I see - added the relevant try/except block.
@MartinKonecny - How do you check for all errors instead of listing each one by one. ? i.e. http error, bad url error, ssl certificate error, etc.... is there a general exception handler that cover all errors? Or I am just going about this in the wrong way?
@Stryker You could can catch all exceptions using except e: and then over time put in multiple more specific catches to have a unique behaviour for each situation (if you need that of course)
4

You might as well do this:

try:
    s = requests.Session()
    response = requests.get('http://mycustomserver.org/download')
    if response.status_code == 503:
        response.raise_for_status()
except requests.exceptions.HTTPError:
    print "oops something unexpected happened!"

response.raise_for_status() raises a requests.exceptions.HTTPError and here we are only calling response.raise_for_status() if the status code is equal to 503

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.