关于except的逻辑

关于except的逻辑

http://img1.sycdn.imooc.com//climg/5eb55111095ea7fb05641108.jpg

老师您好,我按照类方法的方式进行修改后,能够成功运行,但是问题又来了

在最后的输出上,为什么e会在----的前面输出呢?不符合print的顺序呀

而且我将上面的print改成return之后,就没法正常输出了

麻烦请问老师以下关于except的逻辑,我还以为他就是直接执行对应代码,现在看来可能更复杂一点

谢谢老师



正在回答 回答被采纳积分+1

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

1回答
好帮手慕觉浅 2020-05-09 10:33:47

同学你好:

  1. 出现你所说状况的原因是结果中打印的‘Error:40002---两个参数必须是整数’并不是print(e)输出的,而是类方法exa()的print('Error:{0}---{1}'.format(err_code, err_msg))输出的。

    是在try中的rest = divide( 5,0.1)这一行调用了divide(),之后raise BadPramsException(),在BadPramsException中调用类方法exa()而输出的‘Error:40002---两个参数必须是整数’。所以会在‘------------’的前面输出。e没有值所以输出为空。

  2. except是用来捕获异常的,逻辑是很复杂的,不是几行代码就能实现的,所以在课程中没有讲到。在自定义异常中,因为继承于Exception类,所以会将参数传递给e,在except XXException as e时赋值给e并输出。而且这里使用了魔法传参,就可以传递多个值。

    http://img1.sycdn.imooc.com//climg/5eb614b1092c251406720120.jpg

    所以可以在BadPramsException()中加参数,就会被except BadPramsException as e将参数赋值给e,在print(e)中输出。

    http://img1.sycdn.imooc.com//climg/5eb6157109c4002406780423.jpg

    最后呢如果想格式化e的输出建议还是根据课程为异常类重写__str__()方法。

如果解决了你的疑惑,请采纳,祝学习愉快~


  • 谢谢老师,讲得很详细 但是我还是有一事不解,在您回答1中,为什么这里的e没有值呢? 是因为前面已经输出过了么
    2020-05-09 10:43:37
  • 同学你好:是因为在抛出异常raise BadPramsException()这一行中没有给BadPramsException传递参数,所以e没有值。如果写raise BadPramsException(参数),e的值就为该参数的值。
    2020-05-09 11:06:14
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
1.Python零基础入门
  • 参与学习           人
  • 提交作业       2727    份
  • 解答问题       8160    个

想要进入Python Web、爬虫、人工智能等高薪领域,你需要掌握本阶段的Python基础知识,课程安排带你高效学习轻松入门,学完你也能听得懂Python工程师的行业梗。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

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