Python 简明教程
Python - User-Defined Exceptions
User-Defined Exceptions in Python
Python 中的用户定义异常是你创建的自定义错误类,用于处理代码中的特定错误条件。它们派生自内置异常类或其任何子类。
用户定义的异常提供了对应用程序中错误处理的更精确控制 −
-
Clarity − 它们提供特定的错误消息,清楚地说明了出错的原因。
-
Granularity − 它们允许你分别处理不同的错误情况。
-
Maintainability − 它们集中化了错误处理逻辑,使你的代码更易于维护。
How to Create a User-Defined Exception
要创建一个用户定义的异常,请执行以下步骤 −
Step 1 − Define the Exception Class
创建一个新的类,它从内置的“Exception”类或任何其他合适的基类继承。这个新类将作为你的自定义异常。
class MyCustomError(Exception):
pass
Explanation
-
Inheritance − 通过从“Exception”继承,你的自定义异常将具有与内置异常相同的行为和属性。
-
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
-
Attributes − 定义诸如“age”和“message”之类的属性来存储有关错误的信息。
-
Initialization − “ init ” 方法初始化这些属性。“super(). init (self.message)”调用确保用错误消息正确初始化基“Exception”类。
-
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
-
str Method − “ str ”方法返回异常的字符串表示。这是异常被打印时将显示的内容。
-
Custom Message − 自定义消息以包含相关信息,例如此示例中提供的年龄。
Raising User-Defined Exceptions
一旦定义了自定义异常,就可以在代码中提高它以表示特定错误条件。提高用户定义异常涉及使用 raise 语句,该语句可以带或不带自定义消息和属性。
Handling User-Defined Exceptions
在 Python 中处理用户定义的异常是指使用“try-except”块来捕获并响应你的自定义异常表示的特定条件。这允许你的程序优雅地处理错误并继续运行,或基于提高的异常类型采取特定操作。
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