Flask Error Handler 활용 배경

  • Python 마이크로서비스 배포로 Flask 웹프레임워크 주로 사용
  • Flask에서 제공하는 Error Handler 활용
  • 클라이언트에 보내는 에러 메세지를 커스터마이징하여 출력 세팅
  • 에러 발생 가능한 모든 4xx, 50x 에러 처리 필요
  • flask에서 제공하는 _aborter 라이브러리 활용

 

코드 구현

  • error_handler.py
from flask import Flask, jsonify
from werkzeug.exceptions import HTTPException, _aborter, default_exceptions

def error_app(app):
    """
    Error Handler 정의
    """
 
    def _error_handling(error):
        
        # HTTP Exception인 경우
        if isinstance(error, HTTPException):
            result = {
                "error_code" : error.code,
                "description" : error.description,
                "message" : str(error)
            }
        
        # 그 외 나머지 Exception인 경우
        else:
            # 500 에러로 mapping 돼 있는 error message를 추출
            description_500 = _aborter.mapping[500].description
            result = {
                "error_code" : 500,
                "description" : description_500,
                "message" : str(error)
            }
        
        # result dict 데이터를 json으로 변경
        res = jsonify(result)
        
        # response의 status_code를 result의 error_code 값으로 업데이트
        res.status_code = result['error_code']
        
        return res
    #####################################################################
    
    # error handler 등록
    for code in default_exceptions.keys():
        app.register_error_handler(code, _error_handling)
        
    return app

 

Flask app 소스코드

  • app.py
# 위에서 작성한 코드 패키지 형식으로 활용
from error_handler import _error_handling

# Flask app을 _error_handling으로 감싸주기
app = _error_handling(Flask(__name__))

 

+ Recent posts