详解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的Django框架的dj-scaffold项目
May 30 Python
Python制作爬虫抓取美女图
Jan 20 Python
Python使用time模块实现指定时间触发器示例
May 18 Python
Python基于list的append和pop方法实现堆栈与队列功能示例
Jul 24 Python
python 显示数组全部元素的方法
Apr 19 Python
Python中循环后使用list.append()数据被覆盖问题的解决
Jul 01 Python
python实现随机漫步方法和原理
Jun 10 Python
cProfile Python性能分析工具使用详解
Jul 22 Python
Python3实现将一维数组按标准长度分隔为二维数组
Nov 29 Python
如何利用Python 进行边缘检测
Oct 14 Python
python集合的新增元素方法整理
Dec 07 Python
selenium+超级鹰实现模拟登录12306
Jan 24 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
什么是MVC,好东西啊
2007/05/03 PHP
php 无限级缓存的类的扩展
2009/03/16 PHP
php4与php5的区别小结(配置异同)
2011/12/20 PHP
总结AJAX相关JS代码片段和浏览器模型
2007/08/15 Javascript
js日历功能对象
2012/01/12 Javascript
深入理解Javascript里的依赖注入
2014/03/19 Javascript
JQuery EasyUI 日期控件如何控制日期选择区间
2014/05/05 Javascript
css与javascript跨浏览器兼容性总结
2014/09/15 Javascript
Javascript学习笔记之数组的构造函数
2014/11/23 Javascript
JavaScript实现跨浏览器的添加及删除事件绑定函数实例
2015/08/04 Javascript
BootStrap下拉菜单和滚动监听插件实现代码
2016/09/26 Javascript
js 动态生成json对象、时时更新json对象的方法
2016/12/02 Javascript
详谈js中window.location.search的用法和作用
2017/02/13 Javascript
详解ES6中的三种异步解决方案
2018/06/28 Javascript
npm scripts 使用指南详解
2018/10/08 Javascript
javascript实现智能手环时间显示
2020/09/18 Javascript
Python中实现远程调用(RPC、RMI)简单例子
2014/04/28 Python
python应用程序在windows下不出现cmd窗口的办法
2014/05/29 Python
python编程测试电脑开启最大线程数实例代码
2018/02/09 Python
Python3 安装PyQt5及exe打包图文教程
2019/01/08 Python
详解Python爬取并下载《电影天堂》3千多部电影
2019/04/26 Python
python按行读取文件并找出其中指定字符串
2019/08/08 Python
使用keras根据层名称来初始化网络
2020/05/21 Python
python中if及if-else如何使用
2020/06/02 Python
python中format函数如何使用
2020/06/22 Python
Python 没有main函数的原因
2020/07/10 Python
HTML5标签使用方法详解
2015/11/27 HTML / CSS
进修护士自我鉴定
2013/10/14 职场文书
药学专业毕业生求职信
2013/10/20 职场文书
客服工作职责
2013/12/11 职场文书
会计专业个人求职信范文
2014/01/08 职场文书
感恩节活动策划方案
2014/05/16 职场文书
食品安全标语
2014/06/07 职场文书
作风建设年活动实施方案
2014/10/24 职场文书
社区环境卫生倡议书
2015/04/29 职场文书
口袋妖怪冰系十大最强精灵,几何雪花排第七,第六类似北极熊
2022/03/18 日漫