Python“守护者”之异常处理(一)

大家好,今天我们一起聊聊Python语言的异常处理机制,为什么说异常处理是Python的“守护者”呢?因为它时时刻刻维护着Python世界的和平与稳定,任何一个角落发生了异常、报错,都会触发异常处理机制,及时将异常处理,以此守护着整个Python世界。

下面我给出Python异常处理大家庭的整个名单,大家不需要全部记住,不过常用的还是要混脸熟啊,我也会先介绍给大家认识认识。

首先,有一点需要明确,在Python异常处理大家族中,等级是非常森严的。大家请看上面这个名单,各个成员地位越高,缩进就越少,比如缩进最小的BaseException就是大头领,后面跟着的SystemExit、KeyboardInterrupt、GeneratorExit、Exception四个护法。其中Exception事务最多,所以门下的小弟也就特别多。我们着重需要了解的,也正是Exception。在Python异常处理中,有非常完善的运作机制,一般异常都是小弟去处理,小弟处理不了的逐级上报给大哥。当然你也可以直接指派大哥去处理异常,不过就有点大材小用了,我们一般不这样干。Python异常处理其实也挺像烧开水的,气泡从锅底一层一层被抛到水面,如果在哪一层气泡破了(也就是异常被处理了)就停止向上抛;如果气泡一直没破(异常未被处理),就一直向上抛,直至最上层被系统处理掉。

OK,接下来我们简单介绍一下Python异常处理的部分成员,在这儿用到一个新的工具,Python帮助文档,打开方式很简单,如下图操作。

点击红色方框圈住的地方Python 3.6 Manuals (32-bit),弹出如下窗口

除了上面的方法,大家也可以通过手机或电脑搜索在线Python文档进入查阅。

需要查找什么内容,在搜索框中输入,按回车键就可以了,上图所示的是搜索Exception产生的结果。

我们看一下exception Exception的解释:所有的内建非系统退出的异常都派生于这个类,所有用户自定义的异常也应该派生于这个类

再看一下 ArithmeticError的解释:它是用于触发各种算数错误的内建异常的基类,这些内建异常包括:溢出错误、除0错误、浮点错误等。让我们做个小实验先看看。

我们注意到try区块中代码a = 1/0,势必会触发异常,那么这个异常会不会被ArithmeticError捕捉到呢?我们看一下运行结果。

可以看出,异常被捕获到并正确输出了异常信息,这里有个知识点需要讲解一下,异常类型 as 变量名,可以将异常信息存储在变量中,方便我们打印出来以具体判断到底触发了什么异常。

在try/Except语句中,有一种写法要杜绝,大家请看:

Exception类是ArithmeticError类的父类,用我们前面的话讲Exception就是大哥,你让大哥冲在前面,所有的事情都处理了,还要小弟干嘛。

大家请看,下面才是正确的异常处理方式:

运行结果如下图:

出现了异常,小弟先去解决,小弟解决不了也没事,有大哥在下面兜着,大家把我这句话记住,相信你自己写的时候就不会搞错顺序了。

OK,再告诉大家一个好消息,try/except语句还可以这样写:

运行结果如下图所示:

错误在大哥Exception之前被两位小弟联合捕捉到了,这其实也很好理解,人多力量大嘛,这也算是多部门合作解决问题的美好典范啊!不过它也有一小丢丢问题,就是功劳容易分不清,两个小弟互相抢功劳,我们没办法判断到底是谁捕获了异常,于是你还可以这样写:

运行结果如下图所示:

这次就明确了异常是被LookupError捕获到的。

OK,讲解了这么多,大家也需要消化消化,Python“守护者”之异常处理就先介绍到这儿,还有更多好玩的东西在接下来的文章中再陆陆续续为大家呈现,敬请享用哦!

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180622G1YJKD00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券