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

파이썬에서 오류 코드와 오류 메시지가 포함된 사용자 정의 예외(Exception) 작성하는 방법

파이썬 사용자 정의 예외란?

파이썬에서는 내장 Exception 클래스를 상속받아 자신만의 예외 클래스를 손쉽게 만들 수 있습니다. 이렇게 하면 단순한 에러 메시지를 넘어, 오류 코드(error code), 인수(arguments), 상세 메시지 등을 함께 전달하는 체계적인 예외 처리가 가능해집니다.

아래에서 두 가지 대표적인 패턴을 코드 예제와 함께 살펴보겠습니다.

1. 오류 코드가 포함된 기본 사용자 정의 예외

가장 간단한 형태는 Exception을 상속한 클래스의 생성자(__init__)에 오류 코드를 저장하는 방식입니다.

class ErrorCode(Exception):
    def __init__(self, code):
        self.code = code
        super().__init__(f"Error occurred with code: {code}")

try:
    raise ErrorCode(401)
except ErrorCode as e:
    print("Received error with code:", e.code)

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

Received error with code: 401

raise 문으로 예외를 발생시키고, except 블록에서 해당 예외 객체의 code 속성에 접근해 오류 코드를 확인할 수 있습니다.

2. 여러 인수(오류 코드 + 메시지)를 전달하는 사용자 정의 예외

오류 코드뿐 아니라 추가 정보나 메시지를 함께 전달하고 싶다면, 가변 인수(*args)를 활용할 수 있습니다.

class ErrorArgs(Exception):
    def __init__(self, *args):
        self.args = [a for a in args]

try:
    raise ErrorArgs(403, "foo", "bar")
except ErrorArgs as e:
    print(f"{e.args[0]}: {e.args[1]} , {e.args[2]}")

실행 결과는 다음과 같습니다.

403: foo , bar

이 예제에서는 오류 코드 403과 두 개의 문자열 메시지를 하나의 예외 객체에 담아 전달했습니다. 실무에서는 이런 방식으로 HTTP 상태 코드, 로그 메시지, 디버깅용 컨텍스트 등을 함께 넘기곤 합니다.

정리 및 활용 팁

  • 사용자 정의 예외는 반드시 Exception(또는 그 하위 클래스)을 상속해야 합니다.
  • super().__init__()을 호출하면 표준 예외처럼 문자열 메시지도 함께 출력할 수 있습니다.
  • 프로젝트 규모가 커지면 오류 코드를 상수(Enum)로 관리하고, 예외 모듈을 별도 파일로 분리하면 유지보수가 쉬워집니다.
  • 예외마다 고유한 코드를 부여하면 로그 분석과 디버깅이 훨씬 수월해집니다.

이처럼 사용자 정의 예외를 잘 설계하면, 프로그램에서 발생하는 다양한 오류 상황을 명확하게 구분하고 일관된 방식으로 처리할 수 있습니다.