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中List.count()方法的使用教程
May 20 Python
Python如何实现守护进程的方法示例
Feb 08 Python
Python自动生产表情包
Mar 17 Python
Python读取YUV文件,并显示的方法
Dec 04 Python
python将pandas datarame保存为txt文件的实例
Feb 12 Python
Django中的FBV和CBV用法详解
Sep 15 Python
Python队列、进程间通信、线程案例
Oct 25 Python
pytorch加载自定义网络权重的实现
Jan 07 Python
Python3爬虫关于识别点触点选验证码的实例讲解
Jul 30 Python
用Python创建简易网站图文教程
Jun 11 Python
Python使用socket去实现TCP客户端和TCP服务端
Apr 12 Python
分享python函数常见关键字
Apr 26 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边学边教》(04.编写简易的通讯录――视频教程1)
2006/12/13 PHP
探讨如何在PHP开启gzip页面压缩实例
2013/06/09 PHP
CodeIgniter实现从网站抓取图片并自动下载到文件夹里的方法
2015/06/17 PHP
微信支付开发维权通知实例
2016/07/12 PHP
PHP实现的常规正则验证helper公共类完整实例
2017/04/27 PHP
PHP生成zip压缩包的常用方法示例
2019/08/22 PHP
javascript实现淡蓝色的鼠标拖动选择框实例
2015/05/09 Javascript
js全选按钮的实现方法
2015/11/17 Javascript
基于javascript代码检测访问网页的浏览器呈现引擎、平台、Windows操作系统、移动设备和游戏系统
2015/12/03 Javascript
Jquery针对tr td的一些实用操作方法(必看篇)
2016/10/05 Javascript
Ztree新增角色和编辑角色回显问题的解决
2016/10/25 Javascript
js实现3d悬浮效果
2017/02/16 Javascript
vue调用高德地图实例代码
2017/04/28 Javascript
详解es6超好用的语法糖Decorator
2018/08/01 Javascript
js实现图片上传到服务器和回显
2020/01/19 Javascript
[01:02:10]DOTA2上海特级锦标赛B组小组赛#2 VG VS Fnatic第一局
2016/02/26 DOTA
[03:02]生活中的Dendi之野外度假篇
2016/08/09 DOTA
python服务器端收发请求的实现代码
2014/09/29 Python
Python守护进程用法实例分析
2015/06/04 Python
python anaconda 安装 环境变量 升级 以及特殊库安装的方法
2017/06/21 Python
详解如何利用Cython为Python代码加速
2018/01/27 Python
python对离散变量的one-hot编码方法
2018/07/11 Python
Python实现繁?转为简体的方法示例
2018/12/18 Python
Python逐行读取文件中内容的简单方法
2019/02/26 Python
深入浅析Python 中 is 语法带来的误解
2019/05/07 Python
Python 如何提高元组的可读性
2019/08/26 Python
python 动态迁移solr数据过程解析
2019/09/04 Python
css3气泡 css3关键帧动画创建的动态通知气泡
2013/02/26 HTML / CSS
Ralph Lauren拉夫·劳伦美国官网:带有浓郁美国气息的高品味时装品牌
2017/11/01 全球购物
西班牙购买行李箱和背包网站:Maletas Greenwich
2019/10/08 全球购物
理工类毕业自我鉴定
2014/02/20 职场文书
初中作文评语大全
2014/04/23 职场文书
我们的节日国庆活动方案
2014/08/19 职场文书
开学随笔
2015/08/15 职场文书
剑指Offer之Java算法习题精讲二叉树专项训练
2022/03/21 Java/Android