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实现网络端口转发和重定向的方法
Sep 19 Python
Python下实现的RSA加密/解密及签名/验证功能示例
Jul 17 Python
详解python读取和输出到txt
Mar 29 Python
Django框架封装外部函数示例
May 28 Python
python django model联合主键的例子
Aug 06 Python
Python中Flask-RESTful编写API接口(小白入门)
Dec 11 Python
python实现五子棋游戏(pygame版)
Jan 19 Python
pyspark 随机森林的实现
Apr 24 Python
Django使用Profile扩展User模块方式
May 14 Python
python批量更改目录名/文件名的方法
Apr 18 Python
用Python实现屏幕截图详解
Jan 22 Python
pycharm无法安装cv2模块问题
May 20 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
thinkphp学习笔记之多表查询
2014/07/28 PHP
PHP7匿名类用法分析
2016/09/26 PHP
Javascript hasOwnProperty 方法 & in 关键字
2008/11/26 Javascript
跟我一起学写jQuery插件开发方法(附完整实例及下载)
2010/04/01 Javascript
读jQuery之七 判断点击了鼠标哪个键的代码
2011/06/21 Javascript
YUI Compressor压缩JavaScript原理及微优化
2013/01/07 Javascript
js实现文字跟随鼠标移动而移动的方法
2015/02/28 Javascript
详解JavaScript中循环控制语句的用法
2015/06/03 Javascript
简介JavaScript中substring()方法的使用
2015/06/06 Javascript
JS选中checkbox后获取table内一行TD所有数据的方法
2015/07/01 Javascript
jQuery.prop() 使用详解
2015/07/19 Javascript
Jquery表单验证失败后不提交的解决方法
2016/10/18 Javascript
JS实现的简易拖放效果示例
2016/12/29 Javascript
基于jquery实现多选下拉列表
2017/08/02 jQuery
深入理解Node.js中通用基础设计模式
2017/09/19 Javascript
JavaScript常用工具方法封装
2019/02/12 Javascript
antd-DatePicker组件获取时间值,及相关设置方式
2020/10/27 Javascript
Python struct.unpack
2008/09/06 Python
python将ip地址转换成整数的方法
2015/03/17 Python
Python爬虫爬验证码实现功能详解
2016/04/14 Python
Python在线运行代码助手
2016/07/15 Python
Python制作Windows系统服务
2017/03/25 Python
Python3多线程爬虫实例讲解代码
2018/01/05 Python
django admin添加数据自动记录user到表中的实现方法
2018/01/05 Python
numpy中三维数组中加入元素后的位置详解
2019/11/28 Python
Python爬虫实现模拟点击动态页面
2020/03/05 Python
超级实用的8个Python列表技巧
2020/08/24 Python
浅析python中的del用法
2020/09/02 Python
波兰最大的度假胜地和城市公寓租赁运营商:Sun & Snow
2018/10/18 全球购物
迪卡侬中国官网:Decathlon中国
2020/08/10 全球购物
会计电算化专业毕业生求职信范文
2013/12/10 职场文书
幼儿园教师培训制度
2014/01/16 职场文书
工程承包协议书范本
2014/09/29 职场文书
2015年入党积极分子评语
2015/03/26 职场文书
2016年党校科级干部培训班学习心得体会
2016/01/06 职场文书
html2 canvas svg不能识别的解决方案
2021/06/03 HTML / CSS