🔥 커스텀 예외 만들기

328자
4분

Python에서 예외(exception)는 일반적인 흐름을 방해하는 이벤트를 의미합니다. 때로는 기본 제공되는 예외로 충분하지 않을 때가 있습니다. 이럴 때 사용자 정의 예외(User-Defined Exceptions)를 만들어 사용하는 것이 좋습니다. 커스텀 예외를 만드는 것은 프로그램을 더 안전하고 유지보수하기 쉽게 만들어줍니다.

커스텀 예외의 필요성

커스텀 예외를 사용하면 특정 에러 상황을 더 명확하게 표현할 수 있습니다. 또한, 예외의 이름만 보고도 에러의 원인을 쉽게 파악할 수 있어 코드의 가독성이 향상됩니다.

class NetworkError(Exception):
    pass
 
class DatabaseError(Exception):
    pass
 
python

기본 예외 클래스 상속

커스텀 예외를 만들 때는 기본 Exception 클래스를 상속받아야 합니다. 이렇게 하면 모든 예외의 기본적인 기능을 유지하면서 필요한 부분만 추가할 수 있습니다.

class MyError(Exception):
    pass
 
python

예외 메시지 추가

예외에 메시지를 추가하면 에러 상황을 더 자세히 설명할 수 있습니다. __init__ 메서드를 오버라이딩하여 구현할 수 있습니다.

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

추가 데이터 포함

예외에 추가 데이터를 포함시켜 더 많은 정보를 제공할 수 있습니다. 이를 통해 에러 처리를 더 유연하게 할 수 있습니다.

class APIError(Exception):
    def __init__(self, status_code, message):
        self.status_code = status_code
        self.message = message
 
python

예외 처리 패턴

커스텀 예외를 만든 후에는 try-except 블록으로 적절히 처리해야 합니다. 이를 통해 예외 상황을 보다 효과적으로 관리할 수 있습니다.

try:
    raise ValidationError("Invalid input")
except ValidationError as e:
    print(f"Error: {e.message}")
 
python

예외 체이닝

예외 체이닝은 한 예외가 다른 예외를 발생시킬 때 유용합니다. from 키워드를 사용하여 예외 간의 관계를 명확히 할 수 있습니다.

try:
    raise KeyError("Key is missing")
except KeyError as e:
    raise ValueError("Invalid key") from e
 
python

커스텀 예외의 활용 사례

실제 프로젝트에서 커스텀 예외를 어떻게 활용할 수 있는지 사례를 통해 살펴봅니다.

class FileNotExistsError(Exception):
    def __init__(self, file_path):
        self.file_path = file_path
        self.message = f"{file_path} does not exist"
        super().__init__(self.message)
 
# 파일 처리 예시
try:
    file
 
_path = "unknown_file.txt"
    if not os.path.exists(file_path):
        raise FileNotExistsError(file_path)
except FileNotExistsError as e:
    print(e.message)
 
python

연습문제

  1. TemperatureTooHighTemperatureTooLow라는 두 개의 커스텀 예외 클래스를 만드세요.
  2. 사용자로부터 온도를 입력받아, 설정된 범위를 벗어나면 해당 예외를 발생시키는 함수를 작성하세요.
  3. try-except 블록을 사용하여 이 예외들을 적절히 처리하는 코드를 작성하세요.