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 相关文章推荐
rhythmbox中文名乱码问题解决方法
Sep 06 Python
Python函数学习笔记
Oct 07 Python
python登陆asp网站页面的实现代码
Jan 14 Python
python编程实现12306的一个小爬虫实例
Dec 27 Python
基于python list对象中嵌套元组使用sort时的排序方法
Apr 18 Python
python3实现高效的端口扫描
Aug 31 Python
命令行运行Python脚本时传入参数的三种方式详解
Oct 11 Python
win10子系统python开发环境准备及kenlm和nltk的使用教程
Oct 14 Python
Django admin禁用编辑链接和添加删除操作详解
Nov 15 Python
PyCharm安装PyQt5及其工具(Qt Designer、PyUIC、PyRcc)的步骤详解
Nov 02 Python
Python爬虫中Selenium实现文件上传
Dec 04 Python
python基于tkinter实现gif录屏功能
May 19 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
Yii 2中的load()和save()示例详解
2017/08/03 PHP
JavaScript 设计模式学习 Factory
2009/07/29 Javascript
IE中jquery.form中ajax提交没反应解决方法分享
2012/09/11 Javascript
Javascript alert消息换行的方法
2013/08/07 Javascript
使用Jquery实现点击文字后变成文本框且可修改
2013/09/21 Javascript
javascript RegExp 使用说明
2016/05/21 Javascript
EasyUI布局 高度自适应
2016/06/04 Javascript
jQuery插件学习教程之SlidesJs轮播+Validation验证
2016/07/12 Javascript
详细探究ES6之Proxy代理
2016/07/22 Javascript
JS实现列表的响应式排版(推荐)
2016/09/01 Javascript
简单三步实现报表页面集成天气
2016/12/15 Javascript
javascript实现table单元格点击展开隐藏效果(实例代码)
2017/04/10 Javascript
JS实现的计数排序与基数排序算法示例
2017/12/04 Javascript
关于Vue单页面骨架屏实践记录
2017/12/13 Javascript
详解Vue This$Store总结
2018/12/17 Javascript
Node.js使用supervisor进行开发中调试的方法
2019/03/26 Javascript
Vue中使用better-scroll实现轮播图组件
2020/03/07 Javascript
python 列表,数组和矩阵sum的用法及区别介绍
2018/06/28 Python
使用python脚本实现查询火车票工具
2018/07/19 Python
python3 打开外部程序及关闭的示例
2018/11/06 Python
使用python接受tgam的脑波数据实例
2020/04/09 Python
小狗电器官方商城:中国高端吸尘器品牌
2017/03/29 全球购物
linux面试题参考答案(8)
2016/04/19 面试题
白酒市场开发计划书
2014/01/09 职场文书
公司中秋节活动方案
2014/02/12 职场文书
革命先烈的英雄事迹材料
2014/02/15 职场文书
中专生自荐信
2014/06/25 职场文书
法制教育演讲稿
2014/09/10 职场文书
个人三严三实对照检查材料思想汇报
2014/09/22 职场文书
客房服务员岗位职责
2015/02/09 职场文书
接待员岗位职责
2015/02/13 职场文书
律师函格式范本
2015/05/27 职场文书
《陶罐和铁罐》教学反思
2016/03/03 职场文书
让人瞬间清醒的句子,句句经典,字字如金
2019/07/08 职场文书
python删除csv文件的行列
2021/04/06 Python
Vue实现导入Excel功能步骤详解
2021/07/03 Vue.js