ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 에러를 raise해서 처리하는 방법
    concept/python 2020. 7. 28. 22:13

    아무리 코드를 잘 짜도 API 자체에서 오류가 발생하게 되면 어쩔 수 없이 사용자 입장에서는 에러를 겪을 수 밖에 없다.

     

    이런 문제를 해결하기 위해서는! Fallback을 활용할 수 있다.

     

    여기서 Fallback이란?
    어떤 기능이 약해지거나 제대로 동작하지 않을 때, 이에 대처하는 기능 또는 동작을 말한다.

     

    API를 호출할 때, 첫번째 API에서 호출이 실패하면 두번째 API로, 두번째 API에서 호출이 실패하면 세번째 API를 호출하게 만든다면

    API 3개가 모두 먹통이 아닌 이상, 사용자 입장에서는 아무런 문제가 없이 서비스를 사용할 수 있는 것이다.

     

     

    이를 위해서는 에러를 raise하는 것이 필요하다!

    에러 raise를 통해서 발생가능한 에러를 미리 예측하고 에러가 발생했을 때 어떻게 해결해야할지 정해주는 것이다.

    def tryFirstAPI(a, b):
    	# 먼저 API get 요청을 받아와서 변수에 저장한다.
    	resp = requests.get(api주소, 파라미터).json()
    	# get 요청을 받아온게 없을 때? 에러를 raise 해 준다.
    	if not resp:
        	raise ConnectionError
    	# ....함수 기능....
    
    def trySecondAPI(a, b):
    	# ....tryFirstAPI와 같은 방식으로 에러 raise....
     
    def tryThirdAPI(a, b):
    	# ....tryFirstAPI와 같은 방식으로 에러 raise....

    위와 같이 API를 요청하는 함수에서 에러 raise 처리를 해준 후

     

     

    API를 요청하는 함수를 실행하는 함수를 아래와 같이 따로 작성한다.

    def get_value(a, b):
        try:
            result = tryFirstAPI(a, b)
        except ConnectionError as e: 
            result = get_sub_value(a, b)
            # 아래는 슬랙에 알림을 발생하는 기능으로 어떤 오류가 발생했는지 알 수 있다.
            logging.exception(f'first API function response error. {e}')
        return result
    
    def get_sub_value(a, b):
        try:
            result = trySecondAPI(a, b)
        except RuntimeError as e:
            result = tryThirdAPI(a, b)
            # 아래는 슬랙에 알림을 발생하는 기능으로 어떤 오류가 발생했는지 알 수 있다.
            logging.exception(f'second API function response error. {e}')
        return result

     

    여기서 주의해야할 점은 예외의 예외처리는 안먹힌다는 것!

    한마디로

    exception은 try문 안에서 발생한 예외만을 처리한다. except 문 안에서 발생한 예외는 처리되지 않는다.

     

    그래서 함수를 두개를 만들어 주어야 try안에서 실행한 함수에 예외가 발생했을 때, except 문으로 넘어갈 수 있게 된다.

    'concept > python' 카테고리의 다른 글

    파이썬에서 가상환경을 쓰는 이유  (0) 2020.07.28
    python-django 간단하게 배우기  (0) 2020.07.16

    댓글

Designed by Tistory.