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警察与小偷的实现之一客户端与服务端通信实例
Oct 09 Python
python中字典(Dictionary)用法实例详解
May 30 Python
带你了解python装饰器
Jun 15 Python
python实现画圆功能
Jan 25 Python
利用python如何处理百万条数据(适用java新手)
Jun 06 Python
python 自定义对象的打印方法
Jan 12 Python
kali中python版本的切换方法
Jul 11 Python
Python pandas实现excel工作表合并功能详解
Aug 29 Python
Python中断多重循环的思路总结
Oct 04 Python
Python函数生成器原理及使用详解
Mar 12 Python
如何基于python把文字图片写入word文档
Jul 31 Python
python读取mat文件生成h5文件的实现
Jul 15 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
php中file_get_contents与curl性能比较分析
2014/11/08 PHP
利用PHP命令行模式采集股票趋势信息
2016/08/09 PHP
php文件包含目录配置open_basedir的使用与性能详解
2017/04/03 PHP
Laravel框架在本地虚拟机快速安装的方法详解
2018/06/11 PHP
thinkPHP5框架实现基于ajax的分页功能示例
2018/06/12 PHP
Kibo 用于处理键盘事件的Javascript工具库
2011/10/28 Javascript
jQuery ui 利用 datepicker插件实现开始日期(minDate)和结束日期(maxDate)
2014/05/22 Javascript
jquery实现一个简单好用的弹出框
2014/09/26 Javascript
浅析JSONP技术原理及实现
2016/06/08 Javascript
Javascript如何判断数据类型和数组类型
2016/06/22 Javascript
JS+CSS3模拟溢出滚动效果
2016/08/12 Javascript
Bootstrap分页插件之Bootstrap Paginator实例详解
2016/10/15 Javascript
EasyUI学习之DataGird分页显示数据
2016/12/29 Javascript
jQuery实现节点的追加、替换、删除、复制功能示例
2017/07/11 jQuery
bootstrap插件treeview实现全选父节点下所有子节点和反选功能
2017/07/21 Javascript
js定时器+简单的动画效果实例
2017/11/10 Javascript
Bootstrap 3多级下拉菜单实例
2017/11/23 Javascript
详解vue+webpack+express中间件接口使用
2018/07/17 Javascript
小程序开发基础之view视图容器
2018/08/21 Javascript
微信小程序控制台提示warning:Now you can provide attr "wx:key" for a "wx:for" to improve performance解决方法
2019/02/21 Javascript
js获取 gif 的帧数的代码实例
2019/09/10 Javascript
Javascript实现html转pdf高清版(提高分辨率)
2020/02/19 Javascript
vue+Element-ui实现登录注册表单
2020/11/17 Javascript
python基础教程之类class定义使用方法
2014/02/20 Python
pandas创建新Dataframe并添加多行的实例
2018/04/08 Python
python调试神器PySnooper的使用
2019/07/03 Python
简单易懂Pytorch实战实例VGG深度网络
2019/08/27 Python
详解pandas绘制矩阵散点图(scatter_matrix)的方法
2020/04/23 Python
推荐技术人员一款Python开源库(造数据神器)
2020/07/08 Python
FORZIERI福喜利中国官网:奢侈品购物梦工厂
2019/05/03 全球购物
销售员自我评价怎么写
2013/09/19 职场文书
运动会广播稿200米
2014/01/27 职场文书
《都江堰》教学反思
2014/02/07 职场文书
2014年五四青年节活动方案
2014/03/29 职场文书
校园演讲稿汇总
2014/05/21 职场文书
教师四风问题整改措施
2014/09/25 职场文书