python中的五种异常处理机制介绍


Posted in Python onSeptember 02, 2014

从几年前开始学习编程直到现在,一直对程序中的异常处理怀有恐惧和排斥心理。之所以这样,是因为不了解。这次攻python,首先把自己最畏惧和最不熟悉的几块内容列出来,里面就有「异常处理」这一项。

《Dive into Python》并没有专门介绍异常处理,只是例子中用到的时候略微说明了一下。今天下载《Learn Python》,直接进异常处理这块。这一部分有四章,第一章讲解异常处理的一般使用方法,后面的章节深入地讨论其机制。我目前只看了第一章,先学会用,以后有必要的时候再扩展阅读。

python主要支持五种异常机制,一一列举。

默认的异常处理器

s = 'Hello girl!'

print s[100]

print 'continue'

如果我们没有对异常进行任何预防,那么在程序执行的过程中发生异常,就会中断程序,调用python默认的异常处理器,并在终端输出异常信息。这种情况下,第3行代码不会执行。

try…except

s = 'Hello girl!'

try:

 print s[100]

except IndexError:

 print 'error...'

print 'continue'

程序执行到第2句时发现try语句,进入try语句块执行,发生异常,回到try语句层,寻找后面是否有except语句。找到except语句后,会调用这个自定义的异常处理器。except将异常处理完毕后,程序继续往下执行。这种情况下,最后两个print语句都会执行。

except后面也可以为空,表示捕获任何类型的异常。

try…finally

s = 'Hello girl!'

try:

 print s[100]

finally:

 print 'error...'

print 'continue'

finally语句表示,无论异常发生与否,finally中的语句都要执行。但是,由于没有except处理器,finally执行完毕后程序便中断。这种情况下,倒第2个print会执行,到第1个不会执行。如果try语句中没有异常,三个print都会执行。

assert

assert False,'error...'

print 'continue'

这个语句,先判断assert后面紧跟的语句是True还是False,如果是True则继续执行print,如果是False则中断程序,调用默认的异常处理器,同时输出assert语句逗号后面的提示信息。本例情况下,程序中断,提示error,后面的print不执行。

with…as

with open('nothing.txt','r') as f:

 f.read()

 print 2/0

print 'continue'

我们平时在使用类似文件的流对象时,使用完毕后要调用close方法关闭,很麻烦。这里with…as语句提供了一个非常方便的替代方法:open打开文件后将返回的文件流对象赋值给f,然后在with语句块中使用。with语句块完毕之后,会隐藏地自动关闭文件。

如果with语句或语句块中发生异常,会调用默认的异常处理器处理,但文件还是会正常关闭。

这种情况下,会抛出异常,最后的print不执行。

书中介绍的很详细,除了上面我提到的之外,还有很多有用的附加信息,比如try..except..finally..else可以连用,比如自定义异常类。这里不再列出,详情可以参考这本书中的介绍。

Python 相关文章推荐
python连接MySQL数据库实例分析
May 12 Python
Python 制作糗事百科爬虫实例
Sep 22 Python
利用python模拟sql语句对员工表格进行增删改查
Jul 05 Python
python实现机器学习之多元线性回归
Sep 06 Python
详解Python基础random模块随机数的生成
Mar 23 Python
Python数据可视化:饼状图的实例讲解
Dec 07 Python
python基于plotly实现画饼状图代码实例
Dec 16 Python
python读取ini配置文件过程示范
Dec 23 Python
jupyter notebook参数化运行python方式
Apr 10 Python
浅谈Python中的字符串
Jun 10 Python
Django nginx配置实现过程详解
Sep 10 Python
pytorch Dropout过拟合的操作
May 27 Python
python之yield表达式学习
Sep 02 #Python
python中的hashlib和base64加密模块使用实例
Sep 02 #Python
python多线程编程中的join函数使用心得
Sep 02 #Python
python中的函数用法入门教程
Sep 02 #Python
python爬虫入门教程之点点美女图片爬虫代码分享
Sep 02 #Python
python爬虫入门教程之糗百图片爬虫代码分享
Sep 02 #Python
python批量同步web服务器代码核心程序
Sep 01 #Python
You might like
Yii清理缓存的方法
2016/01/06 PHP
IE autocomplete internet explorer's autocomplete
2007/06/30 Javascript
jquery1.5.1中根据元素ID获取元素对象的代码
2011/04/02 Javascript
javascript中注册和移除事件的4种方式
2013/03/20 Javascript
使用jquery写个更改表格行顺序的小功能
2014/04/29 Javascript
gridview生成时如何去掉style属性中的border-collapse
2014/09/30 Javascript
jQuery中parent()方法用法实例
2015/01/07 Javascript
jQuery对象初始化的传参方式
2015/02/26 Javascript
深入理解JavaScript中的并行处理
2016/09/22 Javascript
Bootstrap CSS组件之分页(pagination)和翻页(pager)
2016/12/17 Javascript
JavaScript中的遍历详解(多种遍历)
2017/04/07 Javascript
基于JavaScript实现前端数据多条件筛选功能
2020/08/19 Javascript
基于BootStrap的文本编辑器组件Summernote
2017/10/27 Javascript
《javascript少儿编程》location术语总结
2018/05/27 Javascript
Vue-Quill-Editor富文本编辑器的使用教程
2018/09/21 Javascript
vue + typescript + video.js实现 流媒体播放 视频监控功能
2019/07/07 Javascript
原生js实现随机点名功能
2019/11/05 Javascript
如何在vue 中使用柱状图 并自修改配置
2021/01/21 Vue.js
[54:08]LGD女子刀塔学院 DOTA2炼金术士教学
2014/01/09 DOTA
wxPython 入门教程
2008/10/07 Python
PyMongo安装使用笔记
2015/04/27 Python
Django的信号机制详解
2017/05/05 Python
django进阶之cookie和session的使用示例
2018/08/17 Python
Pandas统计重复的列里面的值方法
2019/01/30 Python
详解Python给照片换底色(蓝底换红底)
2019/03/22 Python
pytorch 在网络中添加可训练参数,修改预训练权重文件的方法
2019/08/17 Python
python实现计算器功能
2019/10/31 Python
Python面向对象原理与基础语法详解
2020/01/02 Python
利用Tensorflow的队列多线程读取数据方式
2020/02/05 Python
Python爬虫实现HTTP网络请求多种实现方式
2020/06/19 Python
国际贸易专业推荐信
2013/11/15 职场文书
应届毕业生求职信范文
2013/12/18 职场文书
餐饮业会计岗位职责
2013/12/19 职场文书
农村面貌改造提升实施方案
2014/03/18 职场文书
房产继承公证书
2014/04/09 职场文书
光之国的四大叛徒:第一贝利亚导致宇宙毁灭,赛文奥特曼在榜
2022/03/18 日漫