设计思路
- 继承关系:自定义异常类应继承自Python标准异常类
Exception
或其子类,这样可以确保与标准异常体系良好融合。对于特定领域的异常,从更具体的标准异常类继承可能更合适,例如ValueError
用于表示无效值相关异常,RuntimeError
用于表示运行时发生的异常等。对于InsufficientFundsError
,继承自RuntimeError
较为合适,因为它表示运行时的资金不足情况;InvalidTransactionError
可以继承自ValueError
,因为它涉及交易相关的无效值。
- 属性设置:根据异常的具体需求,可以在异常类中定义特定的属性,以便在捕获异常时获取更多信息。例如,
InsufficientFundsError
可以包含当前余额属性,InvalidTransactionError
可以包含交易相关详细信息属性。
- 异常信息处理:在异常类的
__init__
方法中,可以设置异常信息,以便在捕获异常时打印出有意义的错误信息。
代码示例
class InsufficientFundsError(RuntimeError):
def __init__(self, balance, required_amount):
self.balance = balance
self.required_amount = required_amount
super().__init__(f"余额不足,当前余额为 {balance},所需金额为 {required_amount}")
class InvalidTransactionError(ValueError):
def __init__(self, transaction_info):
self.transaction_info = transaction_info
super().__init__(f"无效交易:{transaction_info}")
# 示例使用
try:
balance = 100
required_amount = 200
if balance < required_amount:
raise InsufficientFundsError(balance, required_amount)
transaction_info = "非法交易类型"
if transaction_info:
raise InvalidTransactionError(transaction_info)
except InsufficientFundsError as e:
print(f"捕获到余额不足异常: {e}")
print(f"当前余额: {e.balance}, 所需金额: {e.required_amount}")
except InvalidTransactionError as e:
print(f"捕获到无效交易异常: {e}")
print(f"交易信息: {e.transaction_info}")