详解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 相关文章推荐
浅谈django model的get和filter方法的区别(必看篇)
May 23 Python
Python标准模块--ContextManager上下文管理器的具体用法
Nov 27 Python
django表单实现下拉框的示例讲解
May 29 Python
python3.6实现学生信息管理系统
Feb 21 Python
Django 数据库同步操作技巧详解
Jul 19 Python
python PIL和CV对 图片的读取,显示,裁剪,保存实现方法
Aug 07 Python
Python的形参和实参使用方式
Dec 24 Python
Python实现计算长方形面积(带参数函数demo)
Jan 18 Python
python数据预处理 :数据抽样解析
Feb 24 Python
浅谈OpenCV中的新函数connectedComponentsWithStats用法
Jul 05 Python
Python 无限级分类树状结构生成算法的实现
Jan 21 Python
浅谈哪个Python库才最适合做数据可视化
Jun 28 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
php在文件指定行中写入代码的方法
2012/05/23 PHP
PHP正则表达式替换站点关键字链接后空白的解决方法
2014/09/16 PHP
详谈PHP文件目录基础操作
2014/11/11 PHP
PHP+Jquery与ajax相结合实现下拉淡出瀑布流效果【无需插件】
2016/05/06 PHP
php中的单引号、双引号和转义字符详解
2017/02/16 PHP
PHP基于DateTime类解决Unix时间戳与日期互转问题【针对1970年前及2038年后时间戳】
2018/06/13 PHP
javascript通过className来获取元素的简单示例代码
2014/01/10 Javascript
js实现点击添加一个input节点
2014/12/05 Javascript
jquery图片倾斜层叠切换特效代码分享
2015/08/27 Javascript
Bootstrap3多级下拉菜单
2017/02/24 Javascript
基于Echarts图表在div动态切换时不显示的解决方式
2020/07/20 Javascript
JavaScript async/await原理及实例解析
2020/12/02 Javascript
[02:26]DOTA2英雄米拉娜基础教程
2013/11/25 DOTA
[29:23]2014 DOTA2国际邀请赛中国区预选赛 LGD-GAMING VS CIS 第一场1
2014/05/23 DOTA
[01:20]DOTA2上海特级锦标赛现场采访:谁的ID最受青睐
2016/03/25 DOTA
Linux下为不同版本python安装第三方库
2016/08/31 Python
Python中文分词工具之结巴分词用法实例总结【经典案例】
2017/04/15 Python
python 对象和json互相转换方法
2018/03/22 Python
解决Pycharm无法import自己安装的第三方module问题
2018/05/18 Python
python 读取文件并替换字段的实例
2018/07/12 Python
django实现更改数据库某个字段以及字段段内数据
2020/03/31 Python
玩转CSS3色彩
2010/01/16 HTML / CSS
吉列剃须刀英国官网:Gillette英国
2019/03/28 全球购物
英国IT硬件供应商,定制游戏PC:Mesh Computers
2019/03/28 全球购物
CheapTickets泰国:廉价航班,查看促销价格并预订机票
2019/12/28 全球购物
上海中网科技笔试题
2012/02/19 面试题
经贸日语毕业生自荐信
2013/11/03 职场文书
医药代表个人求职信范本
2013/12/19 职场文书
保护黄河倡议书
2014/05/16 职场文书
质量月活动总结
2014/08/26 职场文书
股东出资证明书范例
2014/10/04 职场文书
告知书格式
2015/07/01 职场文书
2019送给家人们的中秋节祝福语
2019/08/15 职场文书
致男子1500米运动员的广播稿
2019/11/08 职场文书
Nginx代理同域名前后端分离项目的完整步骤
2021/03/31 Servers
使用python创建股票的时间序列可视化分析
2022/03/03 Python