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中处理XML的教程
Apr 29 Python
Python抓取电影天堂电影信息的代码
Apr 07 Python
浅谈python中列表、字符串、字典的常用操作
Sep 19 Python
Python实现获取照片拍摄日期并重命名的方法
Sep 30 Python
python 获取键盘输入,同时有超时的功能示例
Nov 13 Python
Python二叉搜索树与双向链表转换算法示例
Mar 02 Python
ERLANG和PYTHON互通实现过程详解
Jul 05 Python
基于python解线性矩阵方程(numpy中的matrix类)
Oct 21 Python
pytorch之ImageFolder使用详解
Jan 06 Python
AUC计算方法与Python实现代码
Feb 28 Python
Python基于类路径字符串获取静态属性
Mar 12 Python
如何让python的运行速度得到提升
Jul 08 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项目的方法
2006/10/09 PHP
PHP静态新闻列表自动生成代码
2007/06/14 PHP
在WAMP环境下搭建ZendDebugger php调试工具的方法
2011/07/18 PHP
php环境下利用session防止页面重复刷新的具体实现
2014/01/09 PHP
php查找指定目录下指定大小文件的方法
2014/11/28 PHP
通用JS事件写法实现代码
2009/01/07 Javascript
js 走马灯简单实例
2013/11/21 Javascript
jQuery判断当前点击的是第几个li的代码
2014/09/26 Javascript
JavaScript焦点事件、鼠标事件和滚轮事件使用详解
2016/01/15 Javascript
js获取iframe中的window对象的实现方法
2016/05/20 Javascript
jQuery EasyUI框架中的Datagrid数据表格组件结构详解
2016/06/09 Javascript
Bootstrap基本组件学习笔记之缩略图(13)
2016/12/08 Javascript
ES6新特性六:promise对象实例详解
2017/04/21 Javascript
AngularJS中控制器函数的定义与使用方法示例
2017/10/10 Javascript
JavaScript数组排序功能简单实现
2020/05/14 Javascript
vue中移动端调取本地的复制的文本方式
2020/07/18 Javascript
python绘图方法实例入门
2015/05/19 Python
Python简单删除目录下文件以及文件夹的方法
2015/05/27 Python
Python文件处理
2016/02/29 Python
python+influxdb+shell编写区域网络状况表
2018/07/27 Python
使用python将excel数据导入数据库过程详解
2019/08/27 Python
python config文件的读写操作示例
2019/09/27 Python
Python Celery多队列配置代码实例
2019/11/22 Python
python实现将一维列表转换为多维列表(numpy+reshape)
2019/11/29 Python
Python pandas库中的isnull()详解
2019/12/26 Python
使用python 的matplotlib 画轨道实例
2020/01/19 Python
NumPy统计函数的实现方法
2020/01/21 Python
Django关于admin的使用技巧和知识点
2020/02/10 Python
Django QuerySet查询集原理及代码实例
2020/06/13 Python
关于探究python中sys.argv时遇到的问题详解
2021/02/23 Python
世界上最大的冷却器制造商:Igloo Coolers
2019/07/23 全球购物
日本最大化妆品和美容产品的综合口碑网站:cosme shopping
2019/08/28 全球购物
公务员培的训心得体会
2014/09/01 职场文书
求职自荐信怎么写
2015/03/04 职场文书
三十年同学聚会感言
2015/07/30 职场文书
springBoot基于webSocket实现扫码登录
2021/06/22 Java/Android