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 相关文章推荐
python3 实现的人人影视网站自动签到
Jun 19 Python
Python内置函数——__import__ 的使用方法
Nov 24 Python
关于Tensorflow中的tf.train.batch函数的使用
Apr 24 Python
对Python 3.5拼接列表的新语法详解
Nov 08 Python
Python实现PyPDF2处理PDF文件的方法示例
Sep 25 Python
Django中提示消息messages的设置方式
Nov 15 Python
python将三维数组展开成二维数组的实现
Nov 30 Python
详解用Python进行时间序列预测的7种方法
Mar 13 Python
Pytorch环境搭建与基本语法
Jun 03 Python
在python中使用pyspark读写Hive数据操作
Jun 06 Python
python如何快速生成时间戳
Jul 21 Python
Pycharm 设置默认解释器路径和编码格式的操作
Feb 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
判断客户端浏览器是否安装了Flash插件的多种方法
2010/08/11 Javascript
js实现广告漂浮效果的小例子
2013/07/02 Javascript
jQuery浏览器CSS3特写兼容实例
2015/01/19 Javascript
纯javascript响应式树形菜单效果
2015/11/10 Javascript
JavaScript时间操作之年月日星期级联操作
2016/01/15 Javascript
关于JS中的方法是否加括号的问题
2016/07/27 Javascript
利用nodejs监控文件变化并使用sftp上传到服务器
2017/02/18 NodeJs
基于react框架使用的一些细节要点的思考
2017/05/31 Javascript
在vue项目中引入highcharts图表的方法(详解)
2018/03/05 Javascript
JQuery样式与属性设置方法分析
2019/12/07 jQuery
JS实现动态倒计时功能(天数、时、分、秒)
2019/12/12 Javascript
jquery实现简单每周轮换的日历
2020/09/10 jQuery
Python使用poplib模块和smtplib模块收发电子邮件的教程
2016/07/02 Python
python爬虫框架talonspider简单介绍
2017/06/09 Python
详解Django之admin组件的使用和源码剖析
2018/05/04 Python
解决pycharm运行时interpreter为空的问题
2018/10/29 Python
Python 输入一个数字判断成绩分数等级的方法
2018/11/15 Python
matplotlib实现热成像图colorbar和极坐标图的方法
2018/12/13 Python
Pyqt5如何让QMessageBox按钮显示中文示例代码
2019/04/11 Python
Python导入模块包原理及相关注意事项
2020/03/25 Python
关于python 的legend图例,参数使用说明
2020/04/17 Python
Python基于pandas绘制散点图矩阵代码实例
2020/06/04 Python
HTML5 Canvas API中drawImage()方法的使用实例
2016/03/25 HTML / CSS
整理HTML5移动端开发的常用触摸事件
2016/04/15 HTML / CSS
祖国在我心中演讲稿
2014/01/15 职场文书
作弊检讨书1000字
2014/02/01 职场文书
法律系毕业生自荐信范文
2014/03/27 职场文书
小学生迎国庆演讲稿
2014/09/05 职场文书
离职证明范本(5篇)
2014/09/19 职场文书
2015年度班主任自我评价
2015/03/11 职场文书
入党转正介绍人意见
2015/06/03 职场文书
风之谷观后感
2015/06/11 职场文书
Jsonp劫持学习
2021/04/01 PHP
Python标准库之typing的用法(类型标注)
2021/06/02 Python
PYTHON基于Pyecharts绘制常见的直角坐标系图表
2022/04/28 Python
mysql幻读详解实例以及解决办法
2022/06/16 MySQL