详解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中的__new__与__init__魔术方法理解笔记
Nov 08 Python
Python学习小技巧之列表项的拼接
May 20 Python
Python中defaultdict与lambda表达式用法实例小结
Apr 09 Python
Django使用HttpResponse返回图片并显示的方法
May 22 Python
解决matplotlib库show()方法不显示图片的问题
May 24 Python
使用python语言,比较两个字符串是否相同的实例
Jun 29 Python
Python 多维List创建的问题小结
Jan 18 Python
python3实现指定目录下文件sha256及文件大小统计
Feb 25 Python
Python使用线程来接收串口数据的示例
Jul 02 Python
python实现一个函数版的名片管理系统过程解析
Aug 27 Python
Python 批量读取文件中指定字符的实现
Mar 06 Python
Python模拟登录和登录跳转的参考示例
Oct 30 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
Apache设置虚拟WEB
2006/10/09 PHP
php命令行使用方法和命令行参数说明
2014/04/08 PHP
thinkphp3.2点击刷新生成验证码
2016/02/16 PHP
PHP实现的函数重载功能示例
2018/08/03 PHP
PHP设计模式之模板模式定义与用法详解
2018/12/20 PHP
PDO::query讲解
2019/01/29 PHP
简单的无缝滚动程序-仅几行代码
2007/05/08 Javascript
Extjs Ajax 乱码问题解决方案
2009/04/15 Javascript
js 判断计算字符串长度/判断空的简单方法
2013/08/05 Javascript
document.addEventListener使用介绍
2014/03/07 Javascript
JS长整型精度问题实例分析
2015/01/13 Javascript
JS针对Array的各种操作汇总
2016/11/29 Javascript
AJAX和jQuery动态加载数据的实现方法
2016/12/05 Javascript
Bootstrap table使用方法总结
2017/05/10 Javascript
使用vue构建一个上传图片表单
2017/07/04 Javascript
JS使用setInterval实现的简单计时器功能示例
2018/04/19 Javascript
pageGroup.js实现分页功能
2019/07/27 Javascript
[01:34]完美“圣”典宣传片震撼发布,12.17与你不见不散
2016/12/16 DOTA
[01:22:29]真视界:2019年国际邀请赛总决赛
2020/01/29 DOTA
python3.3教程之模拟百度登陆代码分享
2014/01/16 Python
使用Python写一个贪吃蛇游戏实例代码
2017/08/21 Python
pycharm执行python时,填写参数的方法
2018/10/29 Python
python处理两种分隔符的数据集方法
2018/12/12 Python
Python Numpy 实现交换两行和两列的方法
2019/06/26 Python
python3.7 使用pymssql往sqlserver插入数据的方法
2019/07/08 Python
分享PyCharm的几个使用技巧
2019/11/10 Python
keras .h5转移动端的.tflite文件实现方式
2020/05/25 Python
python 多进程和协程配合使用写入数据
2020/10/30 Python
大学生最新职业生涯规划书范文
2014/01/12 职场文书
环保建议书
2014/03/12 职场文书
公司员工离职证明书
2014/10/04 职场文书
党的群众路线教育实践活动心得体会范文
2014/11/05 职场文书
2014年安全员工作总结
2014/11/13 职场文书
音乐教师个人工作总结
2015/02/06 职场文书
日本动漫十大公认神作:第五现已全网禁播,《死亡笔记》在榜
2022/03/18 日漫
Spring boot admin 服务监控利器详解
2022/08/05 Java/Android