详解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 相关文章推荐
python实现批量转换文件编码(批转换编码示例)
Jan 23 Python
python制作一个桌面便签软件
Aug 09 Python
Python中函数参数设置及使用的学习笔记
May 03 Python
Python实现将Excel转换成xml的方法示例
Aug 25 Python
python生成多个只含0,1元素的随机数组或列表的实例
Nov 12 Python
利用Python求阴影部分的面积实例代码
Dec 05 Python
树莓派实现移动拍照
Jun 22 Python
Django框架自定义模型管理器与元选项用法分析
Jul 22 Python
使用python的turtle绘画滑稽脸实例
Nov 21 Python
python实现俄罗斯方块游戏(改进版)
Mar 13 Python
python中selenium库的基本使用详解
Jul 31 Python
python实现sm2和sm4国密(国家商用密码)算法的示例
Sep 26 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
论建造顺序的重要性
2020/03/04 星际争霸
分享下页面关键字抓取components.arrow.com站点代码
2014/01/30 PHP
safari下载文件自动加了html后缀问题
2018/11/09 PHP
浅谈laravel数据库查询返回的数据形式
2019/10/21 PHP
JavaScript 全面解析各种浏览器网页中的JS 执行顺序
2009/02/17 Javascript
JQuery 国际象棋棋盘 实现代码
2009/06/26 Javascript
Html中JS脚本执行顺序简单举例说明
2010/06/19 Javascript
jquery radio 操作代码
2011/03/16 Javascript
Jquery图形报表插件 jqplot简介及参数详解
2012/10/10 Javascript
关于jquery css的使用介绍
2013/04/18 Javascript
Mac OS X 系统下安装和部署Egret引擎开发环境
2014/09/03 Javascript
JavaScript中string转换成number介绍
2014/12/31 Javascript
Jquery插件仿百度搜索关键字自动匹配功能
2016/05/11 Javascript
node+experss实现爬取电影天堂爬虫
2016/11/20 Javascript
在vue项目中使用element-ui的Upload上传组件的示例
2018/02/08 Javascript
浅谈Angular 的变化检测的方法
2018/03/01 Javascript
vue如何根据网站路由判断页面主题色详解
2018/11/02 Javascript
详解JavaScript 中的批处理和缓存
2020/11/19 Javascript
[08:29]DOTA2每周TOP10 精彩击杀集锦vol.7
2014/06/25 DOTA
[02:21]十步杀一人,千里不留行——DOTA2全新英雄天涯墨客展示
2018/08/29 DOTA
python self,cls,decorator的理解
2009/07/13 Python
详细介绍Python中的偏函数
2015/04/27 Python
解决pycharm 误删掉项目文件的处理方法
2018/10/22 Python
Python可变对象与不可变对象原理解析
2020/02/25 Python
python数据库编程 Mysql实现通讯录
2020/03/27 Python
Matplotlib中rcParams使用方法
2021/01/05 Python
深入理解css中vertical-align属性
2017/04/18 HTML / CSS
CSS3 mask 遮罩的具体使用方法
2017/11/03 HTML / CSS
联想法国官方网站:Lenovo法国
2018/10/18 全球购物
linux比较文件内容的命令是什么
2013/03/04 面试题
财务会计人员求职的自我评价
2014/01/13 职场文书
幼儿园小班见习报告
2014/10/31 职场文书
幼儿教师2014年度工作总结
2014/12/16 职场文书
2015学校年度工作总结
2015/05/11 职场文书
redis requires ruby version2.2.2的解决方案
2021/07/15 Redis
python编程学习使用管道Pipe编写优化代码
2021/11/20 Python