为何自定义Exception子类MyException未被对应except子句捕获?
问题核心原因
你自定义的MyException是独立于Python内置异常体系的自定义异常类,只有主动执行raise MyException()的时候才会触发对应except分支的捕获逻辑。
你try代码块中执行1/0触发的是Python内置的ZeroDivisionError(除零错误),和你声明的MyException没有任何继承关联,自然无法被对应分支捕获,异常就会直接向外抛出。
常见修复方案
根据你的实际需求可以选对应的修改方式:
- 如果你需要捕获除零错误,直接将except后的异常类型改为
ZeroDivisionError即可
class MyException(Exception): pass try: 1/0 except ZeroDivisionError: print('something')
- 如果你需要测试自定义异常的捕获逻辑,在try块中主动抛出自定义异常即可
class MyException(Exception): pass try: raise MyException() except MyException: print('something')
- 如果你需要兜底捕获所有异常,可以改为捕获
Exception类(不推荐生产环境无差别使用,会掩盖未知的程序错误)
class MyException(Exception): pass try: 1/0 except Exception: print('something')
内容的提问来源于stack exchange,提问作者kavan
相关产品推荐
相关产品推荐

