산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> python

Python 사용자 정의 예외 마스터하기: 실전 가이드

Python 사용자 정의 예외

이 튜토리얼에서는 필요에 맞춘 커스텀 예외 정의법을 실용적 예제로 배웁니다.

Python은 프로그램이 예상치 못한 조건을 만나면 에러를 알리는 많은 내장 예외를 제공합니다. 하지만 내장 예외가 직면한 문제를 정확히 설명하지 못할 때가 있습니다. 그런 경우 직접 커스텀 예외 타입을 만들어 코드를 더 명확하고 유지보수하기 쉽게 만들 수 있습니다.


커스텀 예외 만들기

Python에서 커스텀 예외 정의는 간단합니다: 내장 Exception 클래스(또는 그 서브클래스)를 상속하는 새 클래스 만들면 됩니다. 표준 예외 대부분이 Exception에서 파생되므로 커스텀 클래스도 Python 에러 처리 시스템과 매끄럽게 통합됩니다.

> >>> class CustomError(Exception):
...     pass
...
> >>> raise CustomError
Traceback (most recent call last):
...
__main__.CustomError
> >>> raise CustomError("An error occurred")
Traceback (most recent call last):
...
__main__.CustomError: An error occurred

여기서 CustomError는 Exception을 상속하는 사용자 정의 예외. raise로 발생시키며 선택적 메시지 전달 가능. 대규모 프로젝트에선 모든 커스텀 예외를 전용 모듈(예: exceptions.py 또는 errors.py)에 모아두는 게 관례입니다.


예제: Python 사용자 정의 예외

다음 프로그램은 커스텀 예외로 사용자 입력을 유도하는 방법을 보여줍니다. 사용자가 저장된 값을 맞출 때까지 반복해서 숫자 입력 요청. 입력이 너무 크거나 작으면 맞춤 예외로 힌트 제공.

# Python 사용자 정의 예외 정의
class Error(Exception):
    """다른 예외들의 베이스 클래스"""
    pass
class ValueTooSmallError(Error):
    """입력 값이 너무 작을 때 발생"""
    pass
class ValueTooLargeError(Error):
    """입력 값이 너무 클 때 발생"""
    pass
# 목표 숫자
number = 10
# 맞출 때까지 반복
while True:
    try:
        i_num = int(input("Enter a number: "))
        if i_num < number:
            raise ValueTooSmallError
        elif i_num > number:
            raise ValueTooLargeError
        break
    except ValueTooSmallError:
        print("This value is too small, try again!")
        print()
    except ValueTooLargeError:
        print("This value is too large, try again!")
        print()
print("Congratulations! You guessed it correctly.")

샘플 실행:

Enter a number: 12 This value is too large, try again! Enter a number: 0 This value is too small, try again! Enter a number: 8 This value is too small, try again! Enter a number: 10 Congratulations! You guessed it correctly.

이 예에서 베이스 클래스 Error가 두 구체적 에러 타입의 공통 조상 역할. 이 접근으로 예외 계층이 명확해지고 원하면 except Error 하나로 모든 관련 에러 잡기 가능.


예외 클래스 커스터마이징

커스텀 예외는 추가 데이터 저장이나 더 정보적인 메시지 표현도 가능. __init__ 오버라이드하고 필요시 __str__도 오버라이드. 다음은 급여 검증 시나리오.

class SalaryNotInRangeError(Exception):
    """입력 급여 에러용 예외.
    Attributes:
        salary -- 에러 유발 입력 급여
        message -- 에러 설명
    """
    def __init__(self, salary, message="Salary is not in (5000, 15000) range"):
        self.salary = salary
        self.message = message
        super().__init__(self.message)
salary = int(input("Enter salary amount: "))
if not 5000 < salary < 15000:
    raise SalaryNotInRangeError(salary)

출력

Enter salary amount: 2000 Traceback (most recent call last): File "<string>", line 17, in <module> raise SalaryNotInRangeError(salary) __main__.SalaryNotInRangeError: Salary is not in (5000, 15000) range

__init__ 오버라이드로 예외가 문제 값 보유 가능. 커스텀 문자열 표현 원하면 아래처럼 __str__ 오버라이드:

class SalaryNotInRangeError(Exception):
    """입력 급여 에러용 예외.
    Attributes:
        salary -- 에러 유발 입력 급여
        message -- 에러 설명
    """
    def __init__(self, salary, message="Salary is not in (5000, 15000) range"):
        self.salary = salary
        self.message = message
        super().__init__(self.message)
    def __str__(self):
        return f'{self.salary} → {self.message}'
salary = int(input("Enter salary amount: "))
if not 5000 < salary < 15000:
    raise SalaryNotInRangeError(salary)

출력

Enter salary amount: 2000 Traceback (most recent call last): File "/home/user/untitled.py", line 20, in <module> raise SalaryNotInRangeError(salary) __main__.SalaryNotInRangeError: 2000 → Salary is not in (5000, 15000) range

예외 처리 패턴 더 깊게는 Python 예외 처리 튜토리얼 참조.

견고한 애플리케이션 설계 더 알아보기: Python 객체지향 프로그래밍.


python

  1. 파이썬 데이터 타입 마스터하기: 실전 가이드
  2. 파이썬 연산자 마스터하기: 종합 가이드
  3. 파이썬 pass 문 마스터하기: 실전 가이드
  4. 파이썬 함수 인자 마스터하기: 위치, 키워드, 기본 매개변수
  5. Python 딕셔너리 마스터하기: 생성, 조작, 고급 기법
  6. Python 에러와 내장 예외 마스터하기
  7. Python 객체지향 프로그래밍 마스터하기: 클래스, 상속, 캡슐화, 다형성
  8. Python 상속 마스터하기: 개념, 문법, 실전 예제
  9. Python 이터레이터: 작동 원리와 직접 만들기
  10. 파이썬 type()과 isinstance() 이해하기: 실전 예제