logo

예제가 포함된 Python의 사용자 정의 예외

사용자 정의 예외는 다음을 상속하는 새 클래스를 정의하여 생성됩니다. Python의 내장 예외 클래스 또는 그 하위 클래스 중 하나입니다. 이를 통해 우리는 사용자 정의 오류 메시지를 생성하고 애플리케이션에 적합한 방식으로 특정 오류를 처리할 수 있습니다.

사용자 정의 예외를 생성하고 사용하는 단계

Python에서 사용자 정의 예외를 생성하고 사용하려면 다음 단계를 따르세요.



  • 새 예외 클래스를 정의합니다. Exception 또는 해당 하위 클래스에서 상속되는 새 클래스를 만듭니다.
  • 예외를 발생시킵니다: 특정 조건이 발생할 때 사용자 정의 예외를 발생시키려면 raise 문을 사용합니다.
  • 예외 처리: 사용자 정의 예외를 처리하려면 try-Exception 블록을 사용하십시오.

예: 이 예에서는 연령 값이 유효한 범위(0~120) 내에 있는지 확인하기 위해 사용자 지정 예외 InvalidAgeError를 만듭니다.

Python
# Step 1: Define a custom exception class class InvalidAgeError(Exception): def __init__(self age msg='Age must be between 0 and 120'): self.age = age self.msg = msg super().__init__(self.msg) def __str__(self): return f'{self.age} -> {self.msg}' # Step 2: Use the custom exception in your code def set_age(age): if age < 0 or age > 120: raise InvalidAgeError(age) else: print(f'Age set to: {age}') # Step 3: Handling the custom exception try: set_age(150) # This will raise the custom exception except InvalidAgeError as e: print(e) 

산출
150 -> Age must be between 0 and 120 

설명:

  • InvalidAgeError 클래스는 Exception에서 상속됩니다. 이는 __더운__ 나이와 메시지를 받아들이는 방법.
  • __str__ 메서드는 읽을 수 있는 오류 문자열 표현을 반환합니다.
  • set_age()에서 연령이 유효한 범위(0~120)를 벗어나면 예외가 발생합니다.
  • Try-Exception 블록은 예외를 포착하고 오류 메시지를 인쇄합니다.

예외 클래스 사용자 정의

사용자 정의 예외를 생성할 때 Python의 내장 Exception 클래스(또는 ValueError TypeError 등과 같은 하위 클래스)를 하위 클래스로 만듭니다. 그런 다음 고유한 속성 메서드나 사용자 정의 논리를 추가하여 예외를 더욱 유익하게 만들 수 있습니다.

추가 특성을 추가하거나 메서드를 재정의하여 사용자 지정 예외를 향상할 수도 있습니다.

예: 여기서는 오류 코드를 추가하고 오류 메시지를 사용자 정의하여 InvalidAgeError를 개선합니다.

Python
class InvalidAgeError(Exception): def __init__(self age msg='Age must be between 0 and 120' error_code=1001): self.age = age self.msg = msg self.error_code = error_code super().__init__(self.msg) def __str__(self): return f'[Error Code {self.error_code}] {self.age} -> {self.msg}' try: set_age(150) # This will raise the custom exception except InvalidAgeError as e: print(e) 

산출
[Error Code 1001] 150 -> Age must be between 0 and 120 

설명:

  • InvalidAgeError에는 이제 추가 속성 error_code가 있습니다.
  • __str__ 메서드는 오류 코드와 기간을 모두 표시하도록 재정의되었습니다.
  • set_age(150)가 실행되면 예외가 발생하고 try-Exception 블록에서 포착됩니다.
  • 사용자 정의된 오류 메시지가 인쇄되어 오류를 더욱 자세히 설명합니다.

표준 예외를 기본 클래스로 사용

때로는 Exception에서 직접 상속하는 대신 RuntimeError ValueError 등과 같은 표준 예외를 하위 클래스화하여 사용자 정의 예외를 생성할 수 있습니다. 이는 사용자 정의 예외를 특정 종류의 오류로 처리해야 할 때 유용합니다.

예: 이 예에서는 표준 내장 예외인 RuntimeError를 상속하여 사용자 정의 예외 NetworkError를 생성하는 방법을 보여줍니다.

Python
# NetworkError has base RuntimeError and not Exception class NetworkError(RuntimeError): def __init__(self arg): self.args = (arg) # store as tuple try: raise NetworkError('Connection failed') except NetworkError as e: print(e.args) 

산출
('Connection failed') 

설명:

  • NetworkError는 내장된 예외 유형인 RuntimeError에서 상속됩니다.
  • 발생하면 메시지는 args 속성에 튜플로 저장됩니다.
  • 예외가 포착되고 저장된 인수가 표시됩니다.

실제 예: 잘못된 이메일 오류

다음은 이메일 주소가 유효하지 않은 경우 사용자 정의 예외를 발생시키는 간단한 예입니다.

Python
class InvalidEmailError(Exception): def __init__(self email msg='Invalid email format'): self.email = email self.msg = msg super().__init__(self.msg) def __str__(self): return f'{self.email} -> {self.msg}' def set_email(email): if '@' not in email: raise InvalidEmailError(email) print(f'Email set to: {email}') try: set_email('userexample.com') except InvalidEmailError as e: print(e) 

산출
userexample.com -> Invalid email format 

설명:

  • 이메일 주소의 유효성을 검사하기 위해 새로운 예외 클래스 InvalidEmailError가 정의되었습니다.
  • 주어진 이메일에 '@'이 포함되어 있지 않으면 예외가 발생합니다.
  • Try-Exception 블록은 오류를 포착하고 형식화된 메시지를 인쇄합니다.

사용자 정의 예외는 언제 사용합니까?

다음 시나리오에서는 사용자 정의 예외를 고려해야 합니다.

  • 애플리케이션의 특정 오류를 나타냅니다(예: InvalidAgeError DatabaseConnectionError).
  • 더욱 명확하고 설명적인 오류 메시지를 제공합니다.
  • Except를 사용하여 관련 오류 그룹을 별도로 처리합니다.

사용자 정의 예외 프로그램을 사용하면 프로그램의 가독성이 높아지고 유지 관리가 쉬워지고 디버깅이 쉬워집니다.