python之异常处理

  在介绍异常处理之前,我们先简单的介绍一下什么是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、异常的分组处理

  有这么一种场景,在我们的程序运行过程中,如果发生了比较严重的错误,除了写入日志之外,我们还需要立即通知项目负责人进行处理,而当程序遇到一般的错误时,则只需要写入日志就可以了。而这些比较严重的错误可能不止一种,此时我们就需要将异常进行分组,将需要进行统一处理的异常写在一起,方便更好的管理。

示范代码如下:

 

 运行后的结果是:

 

 

怀揣希望去努力,静待美好的出现。

posted @ 2020-05-12 22:58  笔筒里的猫  阅读(416)  评论(0编辑  收藏  举报