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网络编程学习笔记(九):数据库客户端 DB-API
Jun 09 Python
python中pycurl库的用法实例
Sep 30 Python
初步认识Python中的列表与位运算符
Oct 12 Python
Saltstack快速入门简单汇总
Mar 01 Python
Python3中的真除和Floor除法用法分析
Mar 16 Python
Python实现Youku视频批量下载功能
Mar 14 Python
深入分析python中整型不会溢出问题
Jun 18 Python
浅谈python中拼接路径os.path.join斜杠的问题
Oct 23 Python
python 消除 futureWarning问题的解决
Dec 25 Python
keras实现图像预处理并生成一个generator的案例
Jun 17 Python
UI自动化定位常用实现方法代码示例
Oct 27 Python
Python基于tkinter canvas实现图片裁剪功能
Nov 05 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
linux下删除7天前日志的代码(php+shell)
2011/01/02 PHP
php tp验证表单与自动填充函数代码
2012/02/22 PHP
PHP ? EasyUI DataGrid 资料取的方式介绍
2012/11/07 PHP
PHP 常用数组内部函数(Array Functions)介绍
2013/06/05 PHP
yum命令安装php7和相关扩展
2016/07/04 PHP
thinkPHP通用控制器实现方法示例
2017/11/23 PHP
载入进度条 效果
2006/07/08 Javascript
js 实现在离开页面时提醒未保存的信息(减少用户重复操作)
2013/01/16 Javascript
提升PHP安全:8个必须修改的PHP默认配置
2014/11/17 Javascript
JavaScript弹出对话框的三种方式
2016/03/23 Javascript
AngularJS表格详解及示例代码
2016/08/17 Javascript
jquery把int类型转换成字符串类型的方法
2016/10/07 Javascript
基于JavaScript伪随机正态分布代码实例
2019/11/07 Javascript
微信小程序调用wx.getImageInfo遇到的坑解决
2020/05/31 Javascript
[59:32]Liquid vs Fnatic 2019国际邀请赛淘汰赛败者组BO1 8.20.mp4
2020/07/19 DOTA
用Python制作检测Linux运行信息的工具的教程
2015/04/01 Python
Django模板变量如何传递给外部js调用的方法小结
2017/07/24 Python
python 计算两个列表的相关系数的实现
2019/08/29 Python
基于Python实现签到脚本过程解析
2019/10/25 Python
Python基于Dlib的人脸识别系统的实现
2020/02/26 Python
关于python3.7安装matplotlib始终无法成功的问题的解决
2020/07/28 Python
如何通过Python实现RabbitMQ延迟队列
2020/11/28 Python
使用Python获取爱奇艺电视剧弹幕数据的示例代码
2021/01/12 Python
UDP协议功能
2013/01/06 面试题
linux面试题参考答案(5)
2016/11/05 面试题
Java如何获得ResultSet的总行数
2016/09/03 面试题
中专生求职自荐信范文
2013/12/22 职场文书
搞笑获奖感言
2014/01/30 职场文书
车队司机自我鉴定
2014/03/02 职场文书
党员大会主持词
2014/04/02 职场文书
2014大学校园光棍节活动策划书
2014/09/29 职场文书
药品开票员岗位职责
2015/04/15 职场文书
入党后的感想
2015/08/10 职场文书
详解MySQL连接挂死的原因
2021/05/18 MySQL
Python基础之条件语句详解
2021/06/16 Python
阿里云 Windows server 2019 配置FTP
2022/04/28 Servers