ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Python]raise를 사용한 예외 처리 custom
    언어/파이썬 & 장고 2016. 7. 20. 15:07

    파이썬에서 제공하는 error 메세지가 아닌 에러 메세지를 추가적으로 생성하고 발생시키는 방법을 설명합니다.

    오류 생성

    오류는 다음과 같이 파이썬 내장 클래스인 Exception클래스를 상속하여 만들 수 있습니다.

    class MyError(Exception):
        pass


    그리고 다음과 같이 간단한 코드를 개발해 에러를 일부러 발생시켜보겠습니다.

    def test(str):
    	if str =='1':
    		raise MyError()
    	else:
    		print("ok")
     
    test("0")
    test("1")

    위를 실행할 경우 0은 출력이 되지만 1에서는 MyError()가 발생합니다.


    만약 오류메세지를 이용하고 싶다면 다음처럼 예외처리를 합니다.

    try:
        test("0")
        test("1")
    except MyError as e:
        print(e)


    실행을 하면 아무런 오류메세지가 출력이 되지 않습니다. 위의 MyError에 __str__ method를 구현해야 오류메세지를 출력할 수 있습니다. 

    lass MyError(Exception):
        def __str__(self):
            return "custom error message"


    에러 발생시점에 오류 메세지를 전달하고 싶으면 다음과 같이 수정합니다.

    # 방법1
    class CustomError(Exception):
        def __init__(self, msg):
            self.msg = msg
    
        def __str__(self):
            return self.msg
     
    def test(str):
    	if str =='1':
    		raise MyError("1test")
    	else:
    		print("ok")
     
    try:
        test("0")
        test("1")
    except MyError as e:
        print(e)
     
    # 방법2
    class CustomError(Exception):
        def __init__(self, msg):
            super().__init__(msg)
     
    # 호출 부분 동일


    Exception으로 떨어지는 에러 메세지는 타입이 각 구현된 에러 클래스로 떨어지기 때문에 json으로 파싱이 되지 않습니다. 따라서 except에서 나온 에러메세지를 json으로 묶을 경우, str(error message)로 먼저 문자열로 변환한 다음 파싱을 진행해야 합니다.

    댓글