Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

현대 Python에서 사용자 정의 예외(Custom Exception)를 선언하는 방법

현대 Python에서 사용자 정의 예외 선언하기

Python에서 기본 제공되는 Exception 클래스만으로는 부족한 경우가 많습니다. 예외 객체에 추가 정보를 담거나 기본 동작을 확장하고 싶다면 Exception을 상속받아 사용자 정의 예외 클래스를 만드는 것이 좋습니다.

추가 인자를 전달하는 사용자 정의 예외

예외에 추가 인자를 전달하거나 기본 동작을 재정의(오버라이드)하려면 __init__ 메서드를 직접 구현하면 됩니다. 현대 Python에서 권장되는 작성 방식은 다음과 같습니다.

class ValidationError(Exception):
    def __init__(self, message, errors):
        super().__init__(message)
        self.errors = errors

이렇게 구현하면 두 번째 매개변수 errors에 오류 메시지를 담은 딕셔너리 등의 추가 데이터를 전달할 수 있으며, 예외가 발생한 후 필요할 때 언제든 해당 데이터에 접근하여 활용할 수 있습니다.

실전 사용 예시

try:
    raise ValidationError("입력값 검증에 실패했습니다", {"email": "이메일 형식이 올바르지 않습니다"})
except ValidationError as e:
    print(str(e))      # 입력값 검증에 실패했습니다
    print(e.errors)    # {'email': '이메일 형식이 올바르지 않습니다'}

알아두면 좋은 팁

  • Python 3부터는 super(ValidationError, self) 대신 인자 없는 super()를 사용해 더 간결하게 작성할 수 있습니다.
  • 예외 메시지에는 str(e) 또는 e.args[0]로 접근하는 것이 일반적이며, 추가 데이터는 위 예시처럼 별도의 속성(self.errors)으로 관리하는 것이 깔끔합니다.
  • 사용자 정의 예외 이름은 관례상 Error로 끝내는 것이 좋습니다(예: ValidationError, PaymentError).