[Flask] Error handler
시작하며
이런 코드가 있다.
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하자
Author And Source
이 문제에 관하여([Flask] Error handler), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@gyuseok-dev/flask-error-handler저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)