[Flask] Error handler

짱구석·2020년 12월 23일
0
post-thumbnail

시작하며

이런 코드가 있다.

from flask import Flask, jsonify, request
app = Flask(__name__)

@app.route('/a', methods=['POST'])
def a():
    try:
        data = request.get_json()['a']
        return jsonify({'message': data}), 200
    except KeyError:
        return jsonify({'massage': 'KEY_ERROR'}), 400

@app.route('/b', methods=['POST'])
def b():
    try:
        data = request.get_json()['b']
        return jsonify({'message': data}), 200
    except KeyError:
        return jsonify({'massage': 'KEY_ERROR'}), 400

if __name__ == '__main__':
    app.run(host='127.0.0.1', debug=True, port=8001)

분명 잘동작하는 코드지만 KeyError 관련해서 중복의 냄새가 난다.

특히 POST의 경우 KeyError처리는 필수적이기 때문에 이러한 중복은 계속늘어날 수 있다.

flask에서는 친절하게도 이런 에러처리를 도와주는 decorator가 있다.
도와줘요 공식문서

대충 decorator에 처리하고 싶은 에러를 넣어주면 해당함수에서 처리해주고
decorator를 쓰기 싫으면 app에다 등록도 할 수 있다는 것 같다.

손가락이 근질근질하다. 바로 해보자.

적용하기

from flask import Flask, jsonify, request
app = Flask(__name__)

# error handler
@app.errorhandler(KeyError)
def handler_key_error():
    return jsonify({'massage': 'KEY_ERROR'}), 400

@app.route('/a', methods=['POST'])
def a():
#    try:
	data = request.get_json()['a']
	return jsonify({'message': data}), 200
#    except KeyError:
#        return jsonify({'massage': 'KEY_ERROR'}), 400

@app.route('/b', methods=['POST'])
def b():
#    try:
        data = request.get_json()['b']
        return jsonify({'message': data}), 200
#    except KeyError:
#        return jsonify({'massage': 'KEY_ERROR'}), 400

if __name__ == '__main__':
    app.run(host='127.0.0.1', debug=True, port=8001)

결과

기능은 동일하지만 중복은 줄었다.

배웠으면 당장 refactoring하자

0개의 댓글