1

I have a simple app made in Flask. It uses only POST method. It takes 2 numbers (in json) and adds them up.

{"a": 1, "b": 1}

The application responds with the sum of these numbers (also in json).

{"sum": 2}

The code looks like this:

@appFlask.route('sum', methods=['POST'])
def result():
    data = request.get_json()
    return jsonify({'sum': data['a'] + data['b']})

I would like to do error handling. The problem is that there are a lot of these errors, e.g. for the following calls, they should return "400 Bad Request" or if the file isn't in json.

{"a":1, "b":1, "c":1}
{"a", "a":1, "b":1}
{}
{"a":1}
{"a":0, "b":1}

How can i make it in the simplest way? Is there a way to do this in one function?

2 Answers 2

2

You can use catch the error and then you can return "400 Bad Request" and return an example of data and it's validations to the user.

@appFlask.route('sum', methods=['POST'])
def result():
    try:
       data = request.get_json()
       # check if a or b is not 0
       if data['a'] == 0 or data['b'] == 0:
           raise Exception("Error occurred")
       return jsonify({'sum': data['a'] + data['b']})
    except Exception as e:
       return "400 Bad Request"
    

All the other calls mentioned in example will generate error which will be cached.

You don't need to worry for {"a":1, "b":1, "c":1} as it will not affect the code but if you want to consider it bad request you need to do a check for it.

You surely need to do checks according to your needs as there is no built in function for that.

Sign up to request clarification or add additional context in comments.

Comments

0

You can pass along the HTTP status code with your return statement.

@appFlask.route('/sum', methods=['POST'])
def result():
    try:
       data = request.get_json()
       if len(data.keys()) != 2 and all(data.values()): #
           return "Invalid Data", 400
       return jsonify({'sum': data['a'] + data['b']}), 200
    except Exception as e:
       return "Invalid Data", 400

The all() function returns True if all items in an iterable evaluates to true

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.