我定义的异常继承了Exception, 为什么异常没被捕获

正在回答

登陆购买课程后可参与讨论,去登陆

1回答

同学,你好!

1、以上代码没有捕获到自定义异常是因为当除数为0时默认触发的是ZeroDivisionError,而except捕获的是MyError,因此没有捕获到

2、自定义异常需要在try中使用raise主动抛出异常,抛出的异常会在except中被匹配捕获,如下图:

http://img1.sycdn.imooc.com//climg/612b2718099a438307330736.jpg

祝学习愉快~

  • 大可计划 提问者 #1

    1. except捕获的是MyError, 但是MyError继承了Exception, 所以, Exception范围内的异常, 不是也应该被捕获吗


    2. 我定义的异常, 继承了ZeroDivisionError, except用的也是ZeroDivisionError,

    运行结果是, 异常被成功捕获

    为什么 except写的是父类, 父类还能捕获子类的异常

    class MyError(ZeroDivisionError):
        def __init__(self, message):
            self.message = message

        def __str__(self):
            return '自己写的异常' + self.message

    try:
        raise MyError('啦啦啦异常')
    except ZeroDivisionError as e:
        print(e)


    2021-09-01 22:18:55
  • 好帮手慕美 回复 提问者 大可计划 #2

    同学,你好!

    1、异常时触发的是ZeroDivisionError,但except捕获的是MyError,ZeroDivisionError和MyError可以理解为是同一级别的异常,因此捕获不到。

    2、自定义的异常继承了ZeroDivisionError, ZeroDivisionError是包括MyError异常的,因此是可以捕获到的。

    3、在捕获异常时,except后边是父类的话,是可以捕获到子类异常的。

    祝学习愉快!

    2021-09-02 10:02:40
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师