-
[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)로 먼저 문자열로 변환한 다음 파싱을 진행해야 합니다.