说明
《Python 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gr99123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
在 Python 中,BaseException 是所有内置异常类的基类。它定义了 Python 中所有异常的基本行为。所有内置异常都直接或间接地继承自 BaseException。这意味着,任何你自己定义的异常类,如果你希望它继承 Python 内置的异常处理行为,可以直接或间接地继承 BaseException 类。
以下是一个使用自定义异常类的简单示例,该异常类继承自 BaseException:
class WithdrawalError(BaseException):
def __init__(self, balance, amount):
self.balance = balance
self.amount = amount
def __str__(self):
return (f'Error: Insufficient balance ({self.balance}) '
f'to withdraw {self.amount}')
def withdraw(balance, amount):
if balance < amount:
raise WithdrawalError(balance, amount)
else:
return balance - amount
try:
balance = 100
withdraw_amount = 200
new_balance = withdraw(balance, withdraw_amount)
print('Withdrawal successful. New balance:', new_balance)
except WithdrawalError as e:
print(e)
在这个例子中,我们定义了一个自定义异常类 WithdrawalError
,它继承自 BaseException。当尝试从账户中提取金额超过余额时,我们会引发 WithdrawalError 异常。
在 withdraw 函数中,我们检查账户余额是否足够,如果不足,则抛出 WithdrawalError 异常。在try块中,我们尝试调用withdraw函数,并处理可能抛出的 WithdrawalError 异常。如果抛出了异常,我们捕获并打印异常消息,否则,我们打印提款成功的消息和新的余额。
这个例子展示了如何使用自定义异常类来处理特定的错误情况,并提供了清晰的错误消息。
下列异常主要被用作其他异常的基类。
exception BaseException
所有内置异常的基类。 它不应该被用户自定义类直接继承 (这种情况请使用 Exception)。 如果在此类的实例上调用 str(),则会返回实例的参数表示,或者当没有参数时返回空字符串。
args
传给异常构造器的参数元组。 某些内置异常 (例如 OSError) 接受特定数量的参数并赋予此元组中的元素特殊的含义,而其他异常通常只接受一个给出错误信息的单独字符串。with_traceback(tb)
此方法会将 tb 设为新的异常回溯信息并返回异常对象。 它在 PEP 3134 的异常链特性可用之前更为常用。 下面的例子演示了我们如何将一个 SomeException 实例转换为 OtherException 实例而保留回溯信息。 异常一旦被引发,当前帧会被推至 OtherException 的回溯栈顶端,就像当我们允许原始 SomeException 被传播给调用方时它的回溯栈将会发生的情形一样。:try:
...
except SomeException:
tb = sys.exception().__traceback__
raise OtherException(...).with_traceback(tb)
__traceback__
保存关联到该异常的 回溯对象 的可写字段。 另请参阅: raise 语句。add_note(note)
将字符串 note 添加到在异常字符串之后的标准回溯中显示的注释中。 如果 note 不是一个字符串则会引发 TypeError。在 3.11 版本加入。__notes__
由此异常的注释组成的列表,它是通过 add_note() 添加的。 该属性是在调用 add_note() 时创建的。在 3.11 版本加入。BaseException 和 Exception 是 Python 中异常类层次结构中的两个重要基类,它们之间有一些关键的区别。BaseException 是 Exception 的父类,作为子类的 Exception 无法截获父类 BaseException 类型的错误。
所以,Exception 更适合通常情况下的异常处理,而 BaseException 更适合在特殊情况下的异常处理或系统级别的代码中使用。
更新时间:2024-04-09 21:39:29 标签:python 异常 基类