开发者社区> 问答> 正文

继承自BaseException vs Exception

我知道Python中的Exception和BaseException之间有什么区别。我不知道什么是一个很好的做法,更符合Python:应我的例外来自BaseException或``异常继承?

问题来源:stackoverflow

展开
收起
is大龙 2020-03-24 21:54:40 850 0
1 条回答
写回答
取消 提交回答
  • 默认情况下,所有用户定义的异常都应继承自Exception。在文档中建议这样做:

    异常异常

    所有内置的,非系统退出的异常都派生自此类。*所有用户定义的异常也应从此类派生。

    PEP 8也建议并鼓励这样做:

    Exception而不是BaseException派生异常。从BaseException的直接继承是为异常保留的,在这些异常中捕获异常几乎总是错误的事情。

    *通常,由Exception派生的异常应由常规代码处理。相反,直接从BaseException派生的异常与特殊情况相关。像正常异常一样处理它们会导致意外行为。这就是为什么惯用的“全部捕获”处理程序仅处理Exception的原因: def retry(func): while True: try: return func() except Exception as err: print(f"retrying after {type(err)}: {err}")

    直接从BaseException继承的内置异常是KeyboardInterrupt,SystemExit和GeneratorExit,它们与程序,线程或生成器/协程的关闭相关。错误地处理它们会阻止正常关机。

    注意,虽然默认值应该是继承自Exception,但是如果有充分的理由可以继承自BaseException。例如,asyncio.CancelledError也继承自BaseException,因为它表示asyncio线程等效项Task的关闭。

    回答来源:stackoverflow

    2020-03-24 21:54:48
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载