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 28 Python
python 执行shell命令并将结果保存的实例
May 11 Python
python 使用sys.stdin和fileinput读入标准输入的方法
Oct 17 Python
python根据list重命名文件夹里的所有文件实例
Oct 25 Python
解决python 无法加载downsample模型的问题
Oct 25 Python
pycharm 取消默认的右击运行unittest的方法
Nov 29 Python
python随机生成库faker库api实例详解
Nov 28 Python
Jupyter 无法下载文件夹如何实现曲线救国
Apr 22 Python
python实现画图工具
Aug 27 Python
python 邮件检测工具mmpi的使用
Jan 04 Python
浅谈matplotlib默认字体设置探索
Feb 03 Python
Python调用腾讯API实现人脸身份证比对功能
Apr 04 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 面向对象详解
2012/09/13 PHP
PHP中的生成XML文件的4种方法分享
2012/10/06 PHP
PHP遍历数组的方法汇总
2015/04/30 PHP
关于PHP中Session文件过多的问题及session文件保存位置
2016/03/17 PHP
Linux平台php命令行程序处理管道数据的方法
2016/11/10 PHP
JavaScript 计算当天是本年本月的第几周
2009/03/22 Javascript
jQuery验证Checkbox是否选中的代码 推荐
2011/09/04 Javascript
使用js在页面中绘制表格核心代码
2013/09/16 Javascript
JSON中双引号的轮回使用过程中一定要小心
2014/03/05 Javascript
JQuery获取表格数据示例代码
2014/05/26 Javascript
jQuery控制cookie过期时间的方法
2015/04/07 Javascript
nodejs创建web服务器之hello world程序
2015/08/20 NodeJs
jQuery焦点图切换特效代码分享
2015/09/15 Javascript
JS实现的在线调色板实例(附demo源码下载)
2016/03/01 Javascript
JavaScript中的Number数字类型学习笔记
2016/05/26 Javascript
第一次接触神奇的Bootstrap导航条
2016/08/09 Javascript
js实时获取窗口大小变化的实例代码
2016/11/18 Javascript
使用 webpack 插件自动生成 vue 路由文件的方法
2019/08/20 Javascript
vue学习笔记之作用域插槽实例分析
2020/02/01 Javascript
windows下安装Python虚拟环境virtualenvwrapper-win
2019/06/14 Python
Django如何实现网站注册用户邮箱验证功能
2019/08/14 Python
Windows10下Tensorflow2.0 安装及环境配置教程(图文)
2019/11/21 Python
利用python3 的pygame模块实现塔防游戏
2019/12/30 Python
Pycharm中切换pytorch的环境和配置的教程详解
2020/03/13 Python
Node.js 和 Python之间该选择哪个?
2020/08/05 Python
python连接mysql数据库并读取数据的实现
2020/09/25 Python
关于python tushare Tkinter构建的简单股票可视化查询系统(Beta v0.13)
2020/10/19 Python
解析html5 canvas实现背景鼠标连线动态效果代码
2019/06/17 HTML / CSS
高级Java程序员面试要点
2013/08/02 面试题
自荐信格式写作方法有哪些呢
2013/11/20 职场文书
食品安全工作实施方案
2014/03/26 职场文书
优秀学生干部先进事迹材料
2014/05/26 职场文书
创建绿色学校先进个人材料
2014/08/20 职场文书
初中生300字旷课检讨书
2014/11/19 职场文书
行政二审代理词
2015/05/25 职场文书
利用Matlab绘制各类特殊图形的实例代码
2021/07/16 Python