Python 3.x 从BaseException继承vs异常
我知道Python 3.x 从BaseException继承vs异常,python-3.x,Python 3.x,我知道Python中的Exception和BaseException之间有什么区别。我想知道什么是一个好的实践和更具python的: 如果我的异常继承自BaseException或Exception?默认情况下,所有用户定义的异常都应继承自Exception。这是: 异常异常 所有内置的、非系统退出的异常都派生自此类所有用户定义的异常也应从此类派生。 这也是: 从Exception而不是BaseException派生异常。从BaseException直接继承是为异常保留的,因为捕获它们几乎总是错
Python
中的Exception
和BaseException
之间有什么区别。我想知道什么是一个好的实践和更具python的:
如果我的异常继承自
BaseException
或Exception
?默认情况下,所有用户定义的异常都应继承自Exception
。这是:
异常异常
所有内置的、非系统退出的异常都派生自此类所有用户定义的异常也应从此类派生。
这也是:
从Exception
而不是BaseException
派生异常。从BaseException
直接继承是为异常保留的,因为捕获它们几乎总是错误的
通常,从Exception
派生的异常将由常规代码处理。相反,直接从BaseException
派生的异常与特殊情况相关;像处理正常异常一样处理它们可能会导致意外行为。这就是惯用的“一网打尽”处理程序仅处理异常的原因:
def retry(func):
while True:
try:
return func()
except Exception as err:
print(f"retrying after {type(err)}: {err}")
当前直接从BaseException
继承的内置异常有键盘中断
、系统退出
和生成退出
,它们与关闭程序、线程或生成器/协同程序相关。不正确地处理它们将阻止正常关机
请注意,虽然默认值应该是从Exception
继承,但如果有充分的理由,可以从BaseException
继承。例如,还继承自BaseException
,因为它表示关闭asyncio
的线程等价物任务