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

예제가 포함된 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를 사용하여 관련 오류 그룹을 별도로 처리합니다.

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

추천 퀴즈 퀴즈 편집 질문 3개

사용자 정의 예외가 Exception 대신 RuntimeError에서 상속되면 어떻게 되나요?

  • 에이

    다음을 제외하고는 잡을 수 없습니다.

  • 확인되지 않은 예외가 됩니다.

  • 기음

    핸들러에서는 런타임 관련 오류로 처리됩니다.

  • 맞춤 속성이 손실됩니다.

설명:

RuntimeError를 상속하면 런타임 오류뿐만 아니라 사용자 정의 오류로도 처리할 수 있습니다.

사용자 정의 예외 클래스에서 super().__init__(self.msg)가 일반적으로 사용되는 이유는 무엇입니까?

  • 에이

    다중 상속을 방지하려면

  • 기본 Exception 클래스를 올바르게 초기화하려면

  • 기음

    역추적을 재정의하려면

  • 예외를 자동으로 발생시키려면

설명:

super()를 호출하면 기본 예외가 메시지와 함께 올바르게 초기화됩니다.

사용자 정의 예외가 __str__()을 재정의하고 Except 내부에 인쇄되면 무엇이 인쇄됩니까?

  • 에이

    재정의된 문자열 표현

  • 예외의 메모리 주소

  • 기음

    수업 이름만

  • repr()을 사용하지 않는 한 아무것도 없습니다.

설명:

print(e)는 예외 객체의 __str__()을 호출합니다.

예제가 포함된 Python의 사용자 정의 예외퀴즈가 성공적으로 완료되었습니다. 귀하의 점수:   2 /3 정확성 :  0% 설명을 보려면 로그인하세요 1 /3 1 /3 < Previous 다음 >