详解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基础教程之自定义函数介绍
Aug 29 Python
在Python中用get()方法获取字典键值的教程
May 21 Python
python的多重继承的理解
Aug 06 Python
Python二叉树的定义及常用遍历算法分析
Nov 24 Python
Python读取Word(.docx)正文信息的方法
Mar 15 Python
Django重装mysql后启动报错:No module named ‘MySQLdb’的解决方法
Apr 22 Python
python交换两个变量的值方法
Jan 12 Python
Python 利用切片从列表中取出一部分使用的方法
Feb 01 Python
Python3实现zip分卷压缩过程解析
Oct 09 Python
Python如何对XML 解析
Jun 28 Python
Python用来做Web开发的优势有哪些
Aug 05 Python
Pycharm自动添加文件头注释和函数注释参数的方法
Oct 23 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
记录Yii2框架开发微信公众号遇到的问题及解决方法
2018/07/20 PHP
超清晰的document对象详解
2007/02/27 Javascript
在jQuery ajax中按钮button和submit的区别分析
2012/10/07 Javascript
zepto.js中tap事件阻止冒泡的实现方法
2015/02/12 Javascript
jQuery中$(function() {});问题详解
2015/08/10 Javascript
jQuery实现的左右移动焦点图效果
2016/01/14 Javascript
Javascript之String对象详解
2016/06/08 Javascript
深入理解requestAnimationFrame的动画循环
2016/09/20 Javascript
JS实现双击内容变为可编辑状态
2017/03/03 Javascript
微信小程序 Buffer缓冲区的详解
2017/07/06 Javascript
详谈innerHTML innerText的使用和区别
2017/08/18 Javascript
JavaScript 判断iPhone X Series机型的方法
2019/01/28 Javascript
mocha的时序规则讲解
2019/02/16 Javascript
送你43道JS面试题(收藏)
2019/06/17 Javascript
通过vue刷新左侧菜单栏操作
2020/08/06 Javascript
Python3字符串学习教程
2015/08/20 Python
Python使用zip合并相邻列表项的方法示例
2018/03/17 Python
python生成ppt的方法
2018/06/07 Python
Python实现在某个数组中查找一个值的算法示例
2018/06/27 Python
Django中使用第三方登录的示例代码
2018/08/20 Python
python中sort和sorted排序的实例方法
2019/08/26 Python
Django中使用haystack+whoosh实现搜索功能
2019/10/08 Python
Python使用tkinter模块实现推箱子游戏
2019/10/08 Python
python实现扫雷小游戏
2020/04/24 Python
详解Python openpyxl库的基本应用
2021/02/26 Python
英国最大的女性服装零售商:Dorothy Perkins
2017/03/30 全球购物
美国眼镜网站:EyeBuyDirect
2017/04/13 全球购物
Harrods美国:英国最大的百货公司
2018/11/04 全球购物
医学生自我鉴定范文
2013/11/08 职场文书
2014年团队工作总结
2014/11/24 职场文书
公司放假通知怎么写
2015/04/15 职场文书
创业分两种人:那么哪些适合创业?,哪些适合不适合创业呢?
2019/08/23 职场文书
温馨祝福晨语:美丽的一天从我的问候开始
2019/11/28 职场文书
Python控制台输出俄罗斯方块的方法实例
2021/04/17 Python
python-opencv 中值滤波{cv2.medianBlur(src, ksize)}的用法
2021/06/05 Python
weblogic服务建立数据源连接测试更新mysql驱动包的问题及解决方法
2022/01/22 MySQL