在介绍异常处理之前我们先简单的介绍一下什么是python异常以便于我们理解python中的异常处理。
python异常就是python代码在运行期间发生的错误每当发生错误的时候如果你编写了处理该异常的代码程序将继续运行如果你未对异常进行处理程序将停止并显示一个traceback其中包含有关异常的报告。
python中的异常是使用try-except代码块处理的。try-except代码块让python执行指定的操作同时告诉python发生异常时该怎么办。使用了try-except代码块时即便发生异常程序也将继续运行并且显示预先编写在except中的处理信息而不是让人摸不着头脑的traceback消息。下面我们就来学习python的异常处理。
1、try...except 的简单使用
一般情况下变量是在定义之后才能进行调用的这里我们示范一个错误并对这个异常进行处理。代码如下所示
运行后报错信息如下
我们可以发现报错信息提示变量 a 未定义所以在引用时才会报错。
如果我们不想代码运行到这里停止运行或者不想看到这个错误就可以使用try ... except 语句来捕获这个错误告诉python程序如果遇到这个错误该怎么处理代码如下
运行后的结果是
try ... except ... 就可以让python代码中遇到的问题直接抓到并进行处理然后让程序得以继续运行。
2、带有错误类型的 try ... except ... 代码块
在讲带有错误类型的 try ... except ... 代码块之前我们先来了解一下常见的错误类型以便我们更好的理解后面的内容。
常见的错误类型
ImportError:无法引入模块或包
IndexError:下标索引超出序列边界
NameError:使用一个还未赋予对象的变量
SyntaxError:代码逻辑语法错误不能执行不能去捕获
TypeError传入的对象类型与要求不符
ValueError传入一个不被期望的值即使类型正确
KeyError试图访问字典里不存在的键
IOError输入输出异常文件操作
1)带有万能错误基类的代码
在上面我们已经了解了python中常见的错误类型但是如果作为新手的你不是很确定错误的类型就可以使用万能的错误基类来编写代码。
我们还使用上面打印一个未定义变量的例子来进行演示和说明具体的代码如下
运行代码后结果如下
2)带有对应错误类型的代码
还是使用 a 变量未定义的例子来进行说明我们采用NameError来捕捉异常并进行处理具体的代码如下
这里except后面跟的是指定的对应错误基类我们捕捉到的错误并将错误存储到变量e里面在except下面的代码中对错误内容e进行输出运行代码后得到的结果是
3)在同一个代码块中处理多种错误类型
这里我们举两个例子来说明使用try..except...语句来在一个代码块中处理多种错误类型代码如下
运行后的结果是
我们可以看到程序抛出的是IndexError错误此时我们将IndexError错误进行解决后再继续运行代码运行结果是
3、try...except...finally 代码块
我们用比较简单易懂的语言来描述 try ... except ... finally 的用法我们可以这么说
try下面放你需要监控的代码
except处理捕捉到的错误异常
finally不管try下面的代码是否遇到异常finally下面的代码一定会执行
我们举一个比较常用的例子来说明 try ... except ... finally 的具体用法
这个就是打开一个文件读取文件如果文件损坏等导致无法正常打开、读取时会抛出异常但是不论是否打开成功、读取成功最后都会关闭文件这也是 try ... except ... finally 最常用的场景。
4、raise
raise的作用就是主动把异常处理中的错误抛出来让我们看到 traceback 信息一般都是在我们处理完异常信息后再将错误抛出在后期的单元测试中生成测试报告用的比较多。
示范代码如下
运行后的结果如下所示
运行后我们可以发现虽然已经处理了错误但是还是跑出了traceback信息。
5、异常的分组处理
有这么一种场景在我们的程序运行过程中如果发生了比较严重的错误除了写入日志之外我们还需要立即通知项目负责人进行处理而当程序遇到一般的错误时则只需要写入日志就可以了。而这些比较严重的错误可能不止一种此时我们就需要将异常进行分组将需要进行统一处理的异常写在一起方便更好的管理。
示范代码如下
运行后的结果是
怀揣希望去努力静待美好的出现。