我知道Python中的Exception和BaseException之间有什么区别。我不知道什么是一个很好的做法,更符合Python:应我的例外来自BaseException
或``异常继承?
问题来源:stackoverflow
默认情况下,所有用户定义的异常都应继承自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
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。