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中多线程thread与threading的实现方法
Aug 18 Python
Python中datetime模块参考手册
Jan 13 Python
用TensorFlow实现多类支持向量机的示例代码
Apr 28 Python
实例详解python函数的对象、函数嵌套、名称空间和作用域
May 31 Python
python实现windows倒计时锁屏功能
Jul 30 Python
Python学习笔记之迭代器和生成器用法实例详解
Aug 08 Python
python网络编程 使用UDP、TCP协议收发信息详解
Aug 29 Python
Python全局锁中如何合理运用多线程(多进程)
Nov 06 Python
PyTorch学习:动态图和静态图的例子
Jan 06 Python
使用Python第三方库pygame写个贪吃蛇小游戏
Mar 06 Python
Pycharm调试程序技巧小结
Aug 08 Python
python asyncio 协程库的使用
Jan 21 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初学者头疼问题总结
2006/10/09 PHP
Function eregi is deprecated (解决方法)
2013/06/21 PHP
php中instanceof 与 is_a()区别分析
2015/03/03 PHP
php 微信公众平台开发模式实现多客服的实例代码
2016/11/07 PHP
Laravel框架实现调用百度翻译API功能示例
2019/05/30 PHP
JS中style属性
2006/10/11 Javascript
鼠标拖动实现DIV排序示例代码
2013/10/14 Javascript
js简单实现根据身份证号码识别性别年龄生日
2013/11/29 Javascript
javascript判断两个IP地址是否在同一个网段的实现思路
2013/12/13 Javascript
angularJS提交表单(form)
2015/02/09 Javascript
Angular.js中用ng-repeat-start实现自定义显示
2016/10/18 Javascript
JavaScript 中使用 Generator的方法
2017/12/29 Javascript
javascript trie前缀树的示例
2018/01/29 Javascript
vue编译打包本地查看index文件的方法
2018/02/23 Javascript
Vue自定义指令实现checkbox全选功能的方法
2018/02/28 Javascript
vue addRoutes实现动态权限路由菜单的示例
2018/05/15 Javascript
[01:07:11]Secret vs Newbee 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
Python实现在matplotlib中两个坐标轴之间画一条直线光标的方法
2015/05/20 Python
利用标准库fractions模块让Python支持分数类型的方法详解
2017/08/11 Python
python3 实现验证码图片切割的方法
2018/12/07 Python
python 使用turtule绘制递归图形(螺旋、二叉树、谢尔宾斯基三角形)
2019/05/30 Python
Django CSRF认证的几种解决方案
2020/03/03 Python
Python如何批量生成和调用变量
2020/11/21 Python
python空元组在all中返回结果详解
2020/12/15 Python
html5定位并在百度地图上显示的示例
2014/04/27 HTML / CSS
HTML5自定义属性前缀data-及dataset的使用方法(html5 新特性)
2017/08/24 HTML / CSS
澳大利亚著名的纺织品品牌:Canningvale
2020/05/05 全球购物
方法名是否可以与构造器的名字相同
2012/06/04 面试题
综合测评自我鉴定
2013/10/08 职场文书
大学应届生的自我评价
2014/03/06 职场文书
公司业务员岗位职责
2014/03/18 职场文书
学习方法演讲稿
2014/05/10 职场文书
环境整治工作方案
2014/05/18 职场文书
应届大专生自荐书
2014/06/16 职场文书
工商管理专业毕业生自我鉴定2014
2014/10/04 职场文书
红色经典观后感
2015/06/18 职场文书