Exception我知道和BaseException之间有什么区别Python。我想知道什么是更好的做法并且更具Python风格:我的异常应该继承自BaseExceptionorException吗?
Mis*_*agi 11
默认情况下,所有用户定义的异常都应继承自Exception. 文档中建议这样做:
例外
Exception所有内置的、非系统退出的异常都派生自此类。所有用户定义的异常也应该从此类派生。
这也是PEP 8 推荐和推动的:
Exception从而不是派生异常BaseException。直接继承 fromBaseException是为异常保留的,在这些异常中捕获它们几乎总是错误的做法。
一般来说,派生的异常Exception旨在由常规代码处理。相反,直接源自的例外则BaseException与特殊情况相关;像正常异常一样处理它们可能会导致意外的行为。这就是为什么惯用的“catch all”处理程序只处理Exception:
def retry(func):
while True:
try:
return func()
except Exception as err:
print(f"retrying after {type(err)}: {err}")
Run Code Online (Sandbox Code Playgroud)
BaseException直接从current继承的内置异常有KeyboardInterrupt、 、SystemExit和 ,GeneratorExit它们与程序、线程或生成器/协程的关闭相关。不正确地处理它们将阻止正常关闭。
请注意,虽然默认应该是继承自,但如果有充分的理由,Exception也可以继承自。BaseException例如,asyncio.CancelledError也继承自Task.Task,BaseException因为它代表 的线程等效项的关闭。asyncio
| 归档时间: |
|
| 查看次数: |
4840 次 |
| 最近记录: |