Python 简明教程

Python - User-Defined Exceptions

User-Defined Exceptions in Python

Python 中的用户定义异常是你创建的自定义错误类,用于处理代码中的特定错误条件。它们派生自内置异常类或其任何子类。

用户定义的异常提供了对应用程序中错误处理的更精确控制 −

  1. Clarity − 它们提供特定的错误消息,清楚地说明了出错的原因。

  2. Granularity − 它们允许你分别处理不同的错误情况。

  3. Maintainability − 它们集中化了错误处理逻辑,使你的代码更易于维护。

How to Create a User-Defined Exception

要创建一个用户定义的异常,请执行以下步骤 −

Step 1 − Define the Exception Class

创建一个新的类,它从内置的“Exception”类或任何其他合适的基类继承。这个新类将作为你的自定义异常。

class MyCustomError(Exception):
   pass

Explanation

  1. Inheritance − 通过从“Exception”继承,你的自定义异常将具有与内置异常相同的行为和属性。

  2. Class Definition − 类使用标准的 Python 类语法定义。对于简单的自定义异常,你可以使用“pass”语句定义一个空类体。

Step 2 − Initialize the Exception

实现“ init ”方法以初始化任何属性或提供自定义错误消息。这允许你提高异常时传递有关错误的特定信息。

class InvalidAgeError(Exception):
   def __init__(self, age, message="Age must be between 18 and 100"):
      self.age = age
      self.message = message
      super().__init__(self.message)

Explanation

  1. Attributes − 定义诸如“age”和“message”之类的属性来存储有关错误的信息。

  2. Initialization −init ” 方法初始化这些属性。“super(). init (self.message)”调用确保用错误消息正确初始化基“Exception”类。

  3. Default Message − 提供一个默认消息,但你可以在提高异常时覆盖它。

Step 3 − Optionally Override "str" or "repr"

覆盖“ str ”或“ repr ”方法以提供异常的自定义字符串表示。这对于打印或记录异常很有用。

class InvalidAgeError(Exception):
   def __init__(self, age, message="Age must be between 18 and 100"):
      self.age = age
      self.message = message
      super().__init__(self.message)

   def __str__(self):
      return f"{self.message}. Provided age: {self.age}"

Explanation

  1. str Method −str ”方法返回异常的字符串表示。这是异常被打印时将显示的内容。

  2. Custom Message − 自定义消息以包含相关信息,例如此示例中提供的年龄。

Raising User-Defined Exceptions

一旦定义了自定义异常,就可以在代码中提高它以表示特定错误条件。提高用户定义异常涉及使用 raise 语句,该语句可以带或不带自定义消息和属性。

Syntax

以下是提高异常的基本语法 −

raise ExceptionType(args)

Example

在此示例中,“set_age”函数在年龄超出有效范围时引发“InvalidAgeError” −

def set_age(age):
   if age < 18 or age > 100:
      raise InvalidAgeError(age)
   print(f"Age is set to {age}")

Handling User-Defined Exceptions

在 Python 中处理用户定义的异常是指使用“try-except”块来捕获并响应你的自定义异常表示的特定条件。这允许你的程序优雅地处理错误并继续运行,或基于提高的异常类型采取特定操作。

Syntax

以下是处理异常的基本语法 −

try:
   # Code that may raise an exception
except ExceptionType as e:
   # Code to handle the exception

Example

在下面的示例中,“try”块使用无效的年龄调用“set_age”。“except”块捕获“InvalidAgeError”并打印自定义错误消息 −

try:
   set_age(150)
except InvalidAgeError as e:
   print(f"Invalid age: {e.age}. {e.message}")

Complete Example

结合所有步骤,下面是一个创建和使用用户定义异常的完整示例 −

class InvalidAgeError(Exception):
   def __init__(self, age, message="Age must be between 18 and 100"):
      self.age = age
      self.message = message
      super().__init__(self.message)

   def __str__(self):
     return f"{self.message}. Provided age: {self.age}"

def set_age(age):
   if age < 18 or age > 100:
      raise InvalidAgeError(age)
   print(f"Age is set to {age}")

try:
   set_age(150)
except InvalidAgeError as e:
   print(f"Invalid age: {e.age}. {e.message}")

以下是上面代码的输出: -

Invalid age: 150. Age must be between 18 and 100