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多进程分块读取超大文件的方法
Apr 13 Python
Python编程中对super函数的正确理解和用法解析
Jul 02 Python
Python实现完整的事务操作示例
Jun 20 Python
python 生成器协程运算实例
Sep 04 Python
深入理解Python中的 __new__ 和 __init__及区别介绍
Sep 17 Python
python使用Matplotlib画条形图
Mar 25 Python
python多线程http压力测试脚本
Jun 25 Python
python求平均数、方差、中位数的例子
Aug 22 Python
python求绝对值的三种方法小结
Dec 04 Python
最小二乘法及其python实现详解
Feb 24 Python
Pycharm安装Qt Design快捷工具的详细教程
Nov 18 Python
pycharm远程连接服务器并配置python interpreter的方法
Dec 23 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程序内部post数据的方法
2015/03/31 PHP
在PHP站点的页面上添加Facebook评论插件的实例教程
2016/01/08 PHP
PHP+Ajax实现无刷新分页实例详解(附demo源码下载)
2016/04/07 PHP
php基于PDO连接MSSQL示例DEMO
2016/07/13 PHP
PHP回调函数概念与用法实例分析
2017/11/03 PHP
IE JS编程需注意的内存释放问题
2009/06/23 Javascript
jQuery解决iframe高度自适应代码
2009/12/20 Javascript
XENON基于JSON变种
2010/07/27 Javascript
Table冻结表头示例代码
2013/08/20 Javascript
JQuery实现点击div以外的位置隐藏该div窗口
2013/09/13 Javascript
在JS中解析HTML字符串示例代码
2014/04/16 Javascript
JQuery以JSON方式提交数据到服务端示例代码
2014/05/05 Javascript
JS实现页面载入时随机显示图片效果
2016/09/07 Javascript
Vue数据驱动模拟实现5
2017/01/13 Javascript
微信小程序如何像vue一样在动态绑定类名
2018/04/17 Javascript
在Node.js下运用MQTT协议实现即时通讯及离线推送的方法
2019/01/24 Javascript
利用Bootstrap Multiselect实现下拉框多选功能
2019/04/08 Javascript
浅谈vue3中effect与computed的亲密关系
2019/10/10 Javascript
用javascript实现倒计时效果
2021/02/09 Javascript
[43:32]Winstrike vs VGJ.S 2018国际邀请赛淘汰赛BO3 第一场 8.23
2018/08/24 DOTA
Python中操作符重载用法分析
2016/04/29 Python
python3实现ftp服务功能(客户端)
2017/03/24 Python
python生成ppt的方法
2018/06/07 Python
Python TCPServer 多线程多客户端通信的实现
2019/12/31 Python
TUMI香港官网:国际领先的行李箱、背囊品牌
2021/03/01 全球购物
如何执行一个shell程序
2012/11/23 面试题
三八妇女节活动主持词
2014/03/17 职场文书
教师新年寄语
2014/04/03 职场文书
卖房协议书
2014/04/11 职场文书
十八大演讲稿
2014/05/22 职场文书
会计专业自荐信范文
2015/03/05 职场文书
学校中秋节活动总结
2015/03/23 职场文书
本科毕业答辩开场白
2015/05/27 职场文书
小学四年级班务总结该怎么写?
2019/08/16 职场文书
MYSQL主从数据库同步备份配置的方法
2021/05/26 MySQL
《月歌。》宣布制作10周年纪念剧场版《RABBITS KINGDOM THE MOVIE》
2022/04/02 日漫