一、写在前面
由于前段时间一直在找工作,断断续续的写了几篇草稿还没有完善好,发现自己好久没有发表博客了,要养成一个写博客的好习惯,最近接手同事的工作,遇到异常捕获部分的知识点,有所遗忘后在网上搜索相关文章学习的时候发现,并没有比较好的文章能够简单、全面的介绍这一块知识点,故在此记录,希望能够帮助到更多的朋友,正所谓会者不难,难者不会,如果对你有所帮助,记得点赞鼓励一下。后文中的代码部分我都是截图,因为感觉这样看着会舒服很多。
二、为什么需要异常捕获
我记得以前刚开始接触Python异常捕获的时候,我的内心是万马奔腾的,因为最开始接触的时候,大多数文章都是类似如下的一个示例:
其中代码块A就是我们要执行的代码,代码块B就是我们捕获到异常之后要执行的代码(例如打印报错信息),那时的我就在想(挖槽,你都知道你代码块A有异常,你丫的不改正,想啥呢),哈哈哈,不知道有没有和我一样的朋友,所以这一点会让人感到很疑惑,而造成这种疑惑的原因是网上大多数的文章都是用简单的例子来介绍语句的使用,却鲜有说明为什么需要异常捕获,其实对于网上的简单例子而言,因为代码简单,有啥错一眼就看出来了,但是当你代码块A执行例如读取10个文件的时候,由于某些原因导致中间某一个文件缺失,但是你只是知道会出现这样的情况,并不知道一定会出现这样的情况,如果不用异常捕获的话,就会报FileNotFoundError,从而导致程序无法继续执行下去,但是当你使用了try语句的话,就可以轻松的捕获到你程序执行过程中的错误,并且能够让代码继续执行,这就是为什么需要异常捕获的一个简单例子。
三、异常捕获简单使用
虽然异常捕获操作有try、except、else、finally四个语句,但是并不是每次使用的时候都全部使用,其实和if、else、elif很类似,根据具体情况具体选择,也可以嵌套使用,当然方法是灵活的,搞明白原理了,我想大家就可以灵活使用到自己的程序当中。接下来我们就用几个小例子来彻底搞明白这几个语句的作用。
例1
try:
代码块A(这里是我们需要运行的代码)
except:
代码块 B(这里是捕捉到程序执行过程中的异常后你需要执行的操作)
上面代码的变量a我是没有定义的,通过如上代码大家可以知道2点:
1、使用try语句以后,程序不会报错,异常代码之前的结果都可以正常运行。
2、程序会遇到异常时就会执行except下面的代码,并结束,不再执行异常后面的代码。
例2
有时候我们需要知道程序出现了什么异常,我们就可以下面的这种写法来打印异常信息。
try:
代码块A
except error as e:(error是我们捕获的异常类型,这样子我们就可以捕获到我们具体的错误信息)
代码块 B
如果我们不需要打印异常信息的话,也可以如下写法。
其实Python有很多种异常,具体的可以参考这篇博文
例3
else的用法
try:
代码块A
expect:
代码块B
else:
代码块C(如果没有异常,将要执行的代码)
刚好第三循环的时候遇到除数为0的情况,所以是异常的,程序就会执行except下方的代码,但是其他三次循环都是无异常,所以会执行else语句下面的。
例4
finally的用法
try:
代码块A
expect:
代码块B
else:
代码块C
finally:
代码块D(无论程序是否有异常,都会执行)
例5
嵌套使用
try:
代码块
try:
代码块
except:
代码块
except:
代码块
1、外层代码没有错误的情况
2、外层代码出错的情况
基本用法就是如此了,如何灵活搭配try、except、else、finally语句来优化我们的程序就需要熟能生巧了。