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异常处理总结
Aug 15 Python
实例Python处理XML文件的方法
Aug 31 Python
python pandas消除空值和空格以及 Nan数据替换方法
Oct 30 Python
Python修改文件往指定行插入内容的实例
Jan 30 Python
如何使用Python实现自动化水军评论
Jun 26 Python
Python中栈、队列与优先级队列的实现方法
Jun 30 Python
python实现ip地址查询经纬度定位详解
Aug 30 Python
python3.8.1+selenium实现登录滑块验证功能
May 22 Python
python神经网络编程实现手写数字识别
May 27 Python
QT5 Designer 打不开的问题及解决方法
Aug 20 Python
python实现双人五子棋(终端版)
Dec 30 Python
virtualenv隔离Python环境的问题解析
Jun 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 将字符串按大写字母分隔成字符串数组
2010/04/30 PHP
php防止恶意刷新与刷票的方法
2014/11/21 PHP
php判断文件夹是否存在不存在则创建
2015/04/09 PHP
用PHP写的一个冒泡排序法的函数简单实例
2016/05/26 PHP
JavaScript call apply使用 JavaScript对象的方法绑定到DOM事件后this指向问题
2011/09/28 Javascript
JavaScript 5 新增 Array 方法实现介绍
2012/02/06 Javascript
Nodejs学习笔记之测试驱动
2015/04/16 NodeJs
Vue编写多地区选择组件
2017/08/21 Javascript
JS中注入eval, Function等系统函数截获动态代码
2019/04/03 Javascript
了解Javascript中函数作为对象的魅力
2019/06/19 Javascript
原生JS实现留言板功能
2020/02/08 Javascript
vue实现在线学生录入系统
2020/05/30 Javascript
探索node之事件循环的实现
2020/10/30 Javascript
Python通过RabbitMQ服务器实现交换机功能的实例教程
2016/06/29 Python
老生常谈Python进阶之装饰器
2017/05/11 Python
python的numpy模块安装不成功简单解决方法总结
2017/12/23 Python
对TensorFlow中的variables_to_restore函数详解
2018/07/30 Python
对Python w和w+权限的区别详解
2019/01/23 Python
python使用for循环计算0-100的整数的和方法
2019/02/01 Python
Python函数定义及传参方式详解(4种)
2019/03/18 Python
Python将string转换到float的实例方法
2019/07/29 Python
详解Python利用random生成一个列表内的随机数
2019/08/21 Python
Python抓包并解析json爬虫的完整实例代码
2020/11/03 Python
用python监控服务器的cpu,磁盘空间,内存,超过邮件报警
2021/01/29 Python
使用jTopo给Html5 Canva中绘制的元素添加鼠标事件
2014/05/15 HTML / CSS
HTML5去掉输入框type为number时的上下箭头的实现方法
2020/01/03 HTML / CSS
经贸日语专业个人求职信
2013/12/13 职场文书
初中女生自我鉴定
2013/12/19 职场文书
2014公安机关纪律作风整顿思想汇报
2014/09/13 职场文书
向国旗敬礼活动总结
2014/09/27 职场文书
小学教师先进事迹材料
2014/12/15 职场文书
新生儿未入户证明
2015/06/23 职场文书
nginx处理http请求实现过程解析
2021/03/31 Servers
详解CSS不受控制的position fixed
2021/05/25 HTML / CSS
小程序与后端Java接口交互实现HelloWorld入门
2021/07/09 Java/Android
windows10声卡驱动怎么安装?win10声卡驱动安装操作步骤教程
2022/08/05 数码科技