0Pricing
Python Academy · 강의

사용자 정의 예외 클래스

오류를 더 명확하게 전달할 수 있도록 직접 예외 형식을 정의합니다.

사용자 정의 예외 클래스은(는) CoddyKit의 무료 Python Academy 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Python Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Python Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

소개

사용자 정의 예외 클래스는 오류 처리를 명확하고 자체적으로 설명할 수 있게 하며, 호출자가 예외를 정확하게 처리하기 쉽게 만듭니다.

사용자 정의 예외가 필요한 이유

기본 제공 예외는 너무 일반적입니다. 사용자 정의 예외를 사용하면 호출자가 관련 없는 오류까지 포착하지 않고 YOUR 라이브러리의 오류만 포착할 수 있습니다.
class AppError(Exception):
    pass
raise AppError('something went wrong')

Exception 상속하기

class MyError(Exception): pass만 있으면 됩니다. 항상 BaseException이 아니라 Exception을 상속하십시오.
class ValidationError(Exception):
    pass
try:
    raise ValidationError('email is invalid')
except ValidationError as e:
    print(e)

사용자 정의 속성 추가하기

class APIError(Exception): def __init__(self, status, message): self.status = status; super().__init__(message)
class APIError(Exception):
    def __init__(self, status, message):
        self.status = status
        super().__init__(message)
try:
    raise APIError(404, 'Not found')
except APIError as e:
    print(e.status, e)

예외 계층 구조

계층 구조를 만드십시오: class DBError(AppError): pass — 호출자는 모든 앱 오류에 대해 AppError를 포착하거나, DBError만 구체적으로 포착할 수 있습니다.
class AppError(Exception): pass
class DBError(AppError): pass
class NetworkError(AppError): pass
try:
    raise DBError('timeout')
except AppError as e:
    print('app error:', e)

사용자 정의 __str__ 메서드

__str__을 재정의하여 출력할 때 예외 메시지가 표시되는 방식을 제어하십시오.
class RangeError(ValueError):
    def __init__(self, val, lo, hi):
        self.val, self.lo, self.hi = val, lo, hi
    def __str__(self):
        return f'{self.val} not in [{self.lo}, {self.hi}]'
print(RangeError(15, 0, 10))

사용자 정의 예외 발생시키기

함수에서 raise를 사용하여 도메인별 오류를 알리십시오. 이렇게 하면 호출자를 위한 깔끔한 API가 만들어집니다.
class InsufficientFundsError(Exception):
    def __init__(self, needed, available):
        super().__init__(f'Need {needed}, have {available}')
def withdraw(balance, amount):
    if amount > balance:
        raise InsufficientFundsError(amount, balance)
    return balance - amount
try:
    withdraw(100, 200)
except InsufficientFundsError as e:
    print(e)

기본 클래스로 포착하기

except AppError는 모든 하위 클래스인 DBError, NetworkError 등을 포착합니다. 계층 구조를 사용하면 호출자가 원하는 구체성 수준을 선택할 수 있습니다.
class AppError(Exception): pass
class DBError(AppError): pass
try:
    raise DBError('conn failed')
except AppError:
    print('any app error')

컨텍스트 관리자와 예외

사용자 정의 예외는 컨텍스트 관리자와 통합됩니다. class suppressed: __exit__가 True를 반환하면 예외가 억제됩니다.
class SuppressValue(Exception): pass
try:
    raise SuppressValue('ignored')
except SuppressValue:
    pass  # suppress silently
print('continued')

사용자 정의 예외 문서화하기

예외를 발생시킬 WHEN과 속성의 의미인 WHAT을 문서화하십시오. 좋은 독스트링이 있으면 사용자 정의 예외를 쉽게 사용할 수 있습니다.
class ConfigError(Exception):
    """Raised when configuration is invalid.
    Attributes:
        key: The invalid config key
    """
    def __init__(self, key, msg):
        super().__init__(msg)
        self.key = key

모범 사례

계층 구조를 얕게 유지하십시오(2~3단계). 항상 Exception을 상속하십시오. Error로 끝나는 설명적인 이름을 사용하십시오. 전용 exceptions.py 모듈에 배치하십시오.
# Good structure:
class AppError(Exception): pass
class ValidationError(AppError): pass
class NotFoundError(AppError): pass
print('hierarchy demo')

빠른 확인

시스템 종료 이벤트를 포착하지 않으려면 사용자 정의 예외가 무엇을 상속해야 합니까?

복습

사용자 정의 예외는 Exception을 상속하고, __init__에 속성을 추가하며, __str__을 재정의합니다. 포착하기 쉽도록 계층 구조를 만드십시오. exceptions.py 모듈에 배치하십시오.

계속 진행하기

잘하셨습니다! 계속 발전하려면 다음 레슨으로 넘어가십시오.

자주 묻는 질문

“사용자 정의 예외 클래스” 강의는 무료인가요?

네 — “사용자 정의 예외 클래스” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Python Academy 강의 전체를 잠금 해제할 수 있습니다. Python Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“사용자 정의 예외 클래스”에서 뭘 배우나요?

오류를 더 명확하게 전달할 수 있도록 직접 예외 형식을 정의합니다. 브라우저에서 직접 실행하는 실습 코드로 Python Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Python Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Python Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.

“사용자 정의 예외 클래스” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Python Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Python Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 예외 이해하기
  2. try / except / else / finally
  3. 예외 발생과 다시 발생시키기
  4. 사용자 정의 예외 클래스
← Python Academy(으)로 돌아가기