详解Python异常处理中的Finally else的功能


Posted in Python onDecember 29, 2017

Python使用Try Exception来处理异常机制 若Exception中有Try对应的异常处理,则Try - exception之后的代码将被执行,但若Try - exception中没有对应的代码,则程序抛出Traceback停止运行 那么else finally就是针对这两种情况带来的后果分别相应的关键字

else

如果一个Try - exception中,没有发生异常,即exception没有执行,那么将会执行else语句的内容

反之,如果触发了Try - exception(异常在exception中被定义),那么将会执行exception中的内容,而不执行else中的内容

下面代码在python 3中运行通过

try:
  a = 1 / 0
except ZeroDivisionError:
  print("Division is 0 ,Wrong!")
else:
  print("Program is running here!")

由于此时触发了Try - exception,所以执行exception

不执行else

输出结果:Division is 0 ,Wrong!

try:
  a = 1 / 1
except ZeroDivisionError:
  print("Division is 0 ,Wrong!")
else:
  print("Program is running here!")

同理,这段代码由于try中无异常,所以执行else语句

输出结果:Program is running here!

所以如果try中的异常在exception中被指出,那么:

Try - exception-else中,执行了exception不执行else,执行else不执行exception。

或者这么理解:

作者希望Try - exception是指出错误的,如果Try - exception并没有指出错误,则是另外(else)的情况,所以执行else语句

finally

如果try中的异常没有在exception中被指出,那么系统将会抛出Traceback(默认错误代码),并且终止程序,接下来的所有代码都不会被执行,但如果有Finally关键字,则会在程序抛出Traceback之前(程序最后一口气的时候),执行finally中的语句。这个方法在某些必须要结束的操作中颇为有用,如释放文件句柄,或释放内存空间等。

try:
  a = 1 / '1'
except ZeroDivisionError:
  print("Division is 0 ,Wrong!")
else:
  print("Program is running here!")

这个程序会输出Traceback
Traceback (most recent call last):
File “*********************, line 2, in
a = 1 / ‘1'
TypeError: unsupported operand type(s) for /: ‘int' and ‘str'

因为try中的异常没有在exception中被指出,如果改为下面程序

try:
  a = 1 / '1'
except ZeroDivisionError:
  print("Division is 0 ,Wrong!")
finally:
  print("Program is running here!")

输出结果:

Traceback (most recent call last):
File “********************”, line 2, in
a = 1 / ‘1'
TypeError: unsupported operand type(s) for /: ‘int' and ‘str'
Program is running here!

可见,即使Traceback没有消除,但依旧输出了print语句,这就是相当于一个程序的收尾工作(finally)

而且如果程序没有任何错误,finally也会执行

所以可以这么理解:

不管程序有没有异常,finally中的语句必会执行。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python3生成随机数实例
Oct 20 Python
python实现在字符串中查找子字符串的方法
Jul 11 Python
Scrapy的简单使用教程
Oct 24 Python
python使用jieba实现中文分词去停用词方法示例
Mar 11 Python
对django中render()与render_to_response()的区别详解
Oct 16 Python
python tkinter canvas 显示图片的示例
Jun 13 Python
python+openCV调用摄像头拍摄和处理图片的实现
Aug 06 Python
pygame实现烟雨蒙蒙下彩虹雨
Nov 11 Python
Pytoch之torchvision.transforms图像变换实例
Dec 30 Python
python批量替换文件名中的共同字符实例
Mar 05 Python
关于python 的legend图例,参数使用说明
Apr 17 Python
python实现跨年表白神器--你值得拥有
Jan 04 Python
Python2.7+pytesser实现简单验证码的识别方法
Dec 29 #Python
Python实现破解12306图片验证码的方法分析
Dec 29 #Python
解决python使用open打开文件中文乱码的问题
Dec 29 #Python
python爬虫获取京东手机图片的图文教程
Dec 29 #Python
python通过getopt模块如何获取执行的命令参数详解
Dec 29 #Python
基于并发服务器几种实现方法(总结)
Dec 29 #Python
Python matplotlib画图实例之绘制拥有彩条的图表
Dec 28 #Python
You might like
rrmdir php中递归删除目录及目录下的文件
2011/05/15 PHP
学习php设计模式 php实现工厂模式(factory)
2015/12/07 PHP
php curl简单采集图片生成base64编码(并附curl函数参数说明)
2019/02/15 PHP
仅Firefox中链接A无法实现模拟点击以触发其默认行为
2011/07/31 Javascript
用JS在浏览器中创建下载文件
2014/03/05 Javascript
基于jquery实现的可编辑下拉框实现代码
2014/08/02 Javascript
jQuery使用slideUp方法实现控制元素缓慢收起
2015/03/27 Javascript
js实现鼠标经过表格行变色的方法
2015/05/12 Javascript
浅谈JavaScript 覆盖原型以及更改原型
2016/08/31 Javascript
微信小程序 for 循环详解
2016/10/09 Javascript
JavaScript模板引擎Template.js使用详解
2016/12/15 Javascript
VUE前端cookie简单操作
2017/10/17 Javascript
微信小程序实现图片上传、删除和预览功能的方法
2017/12/18 Javascript
微信小程序canvas开发水果老虎机的思路详解
2020/02/07 Javascript
微信小程序吸底区域适配iPhoneX的实现
2020/04/09 Javascript
Nuxt默认模板、默认布局和自定义错误页面的实现
2020/05/11 Javascript
[01:35]辉夜杯战队访谈宣传片—iG.V
2015/12/25 DOTA
python编写爬虫小程序
2015/05/14 Python
Python用 KNN 进行验证码识别的实现方法
2018/02/06 Python
对python numpy数组中冒号的使用方法详解
2018/04/17 Python
Python中跳台阶、变态跳台阶与矩形覆盖问题的解决方法
2018/05/19 Python
python 在指定范围内随机生成不重复的n个数实例
2019/01/28 Python
WxPython建立批量录入框窗口
2019/02/27 Python
tensorflow多维张量计算实例
2020/02/11 Python
Python利用逻辑回归分类实现模板
2020/02/15 Python
使用python批量修改XML文件中图像的depth值
2020/07/22 Python
使用Python解析Chrome浏览器书签的示例
2020/11/13 Python
谷歌浏览器小字体处理方案即12px以下字体
2013/12/17 HTML / CSS
HTML5播放实现rtmp流直播
2020/06/16 HTML / CSS
FOREO斐珞尔官方旗舰店:LUNA露娜洁面仪
2018/03/11 全球购物
大学生自我评价怎样写好
2013/10/23 职场文书
协议书样本
2014/04/23 职场文书
人力资源管理专业自荐信
2014/06/24 职场文书
2015年安全生产目标责任书
2015/01/29 职场文书
浅谈什么是SpringBoot异常处理自动配置的原理
2021/06/21 Java/Android
nginx静态资源的服务器配置方法
2022/07/07 Servers