最近看Vamei的Python文章,其中一篇讲异常处理的,原本看完没啥疑惑,或许是自己想的简单了。

看到评论,一个园友的问题引起我的兴趣。

他的问题是

def func(x):

try:

return ++x

finally:

return x+1

print func(11)

你觉得是几?

看到问题,觉得肯定是12啊,这有什么问题呢?

下边看看我写的例子,就明白其中的问题了。

先看这个

def f():

try:

print 1

return 1

finally:

print 0

return 0

print f()

结果为 1 0 0

以运行结果为准,说明无论try里执行什么,即使是return,也会调用finally的。

但是有一个问题,为什么最后输出的不是1而是0呢?明明try里面已经返回1了!

看下边的代码

def f():

try:

print 1

return 1

finally:

print 0

#return 0

将finally的return屏蔽掉,你或许猜到结果了

结果为 1 0 1

诧异吗?

对比上个结果,说明try的返回值被finally的返回值覆盖了,或许是因为一个函数只能有一个返回值,以最后一个结果为准

由此我想再验证下else的情况,如下

def f():

try:

print 1

return 1

except:

return 2

else:

print 3

return 3

finally:

print 0

#return 0

你觉得,没有异常else会执行吗?

如你所料,并没有执行。

结果为 1 0 1

说明try里面运行完之后return,阻挡了else的执行,但是并没有影响finally的执行。

借用Vamer文章的两句话:

“如果try中没有异常,那么except部分将跳过,执行else中的语句。

finally是无论是否有异常,最后都要做的一些事情。”

这里补充一句,在含有return的情况下,并不会阻碍finally的执行。

python中finally是什么意思_Python中关于try...finally的一些疑问相关推荐

  1. Python基础_第3章_Python中的循环结构

    Python基础_第3章_Python中的循环结构 文章目录 Python基础_第3章_Python中的循环结构 Python中的循环结构 一.回顾分支练习题 1.判断是否为一个合法三角形 2.求世界 ...

  2. Python基础_第5章_Python中的数据序列

    Python基础_第5章_Python中的数据序列 文章目录 Python基础_第5章_Python中的数据序列 Python中的数据序列 一.字典--Python中的==查询==神器 1.为什么需要 ...

  3. python post与get的区别_python中get和post有什么区别

    更多编程教程请到:菜鸟教程 https://www.piaodoo.com/ 友情链接: 高州阳光论坛https://www.hnthzk.com/ 人人影视http://www.sfkyty.com ...

  4. python深复制与浅复制_Python中的深拷贝和浅拷贝详解

    要说清楚Python中的深浅拷贝,需要搞清楚下面一系列概念: 变量-引用-对象(可变对象,不可变对象)-切片-拷贝(浅拷贝,深拷贝) [变量-对象-引用] 在Python中一切都是对象,比如说:3, ...

  5. python运行mcmc为何老出错_python中mcmc方法的实现

    MCMC方法在贝叶斯统计中运用很多,MIT发布的EMCEE是实现的比较好的.介绍页面在下面.源代码中examples里的代码可以帮助理解各种功能,特别是line.py 列出了最小二乘法,最大似然法和M ...

  6. python实例属性与类属性_Python中的类属性和实例属性引发的一个坑-续

    上篇文章Python 中的类属性和实例属性,我们探讨了类属性和实例属性引发的一个小坑.总结了类属性和实例属性的区别如下:类属性可以被类和实例调用,实例属性只能被实例调用 类属性不会随着实例的调用而改变 ...

  7. python计算数组元素的和_python中数组的运算

    Python中进行数组的运算需要调用NumPy包. 其官网是:http://www.numpy.org/​www.numpy.org NumPy是Python语言的一个扩充程序库.它支持高级大量的维度 ...

  8. python中格式化字符串的作用_python中字符串格式化的意义(化妆)

    格式 描述 %%百分号标记 #就是输出一个% %c字符及其ASCII码 %s字符串 %d有符号整数(十进制) %u无符号整数(十进制) %o无符号整数(八进制) %x无符号整数(十六进制) %X无符号 ...

  9. python中 r是什么意思_python中rb含义理解

    Python文件读写的几种模式: r,rb,w,wb 那么在读写文件时,有无b标识的的主要区别在哪里呢? 文件使用方式标识 'r':默认值,表示从文件读取数据 'w':表示要向文件写入数据,并截断以前 ...

  10. python字典是什么的集合_Python中的字典和集合

    文章目录字典1.介绍 2.创建字典 3.字典内元素的访问 4.字典元素的添加.修改.删除 5.关于字典的其它操作 6.字典存储底层原理 集合1.介绍 2.相关操作 3.集合元素的添加 4.移除元素 字 ...

最新文章

  1. expdp数据泵导出操作
  2. C语言SHELL排序算法
  3. 方法中的参数的五种形式
  4. C ++基础 | 格式化输出,文件输入输出(File IO),头文件(Header Files)_3
  5. 最新开源:BundleTrack - 无需任何CAD模型的6D物体姿态跟踪算法(谷歌X实习生)...
  6. Zabbix监控结合Grafana绘图
  7. Crossin先生的微信打飞机游戏(4)
  8. springboot-jpa-querydsl
  9. C#中属性PropertyInfo的setvalue方法
  10. JTT808、JTT809、JTT796、JTT794、JTT1077、JTT1078区别与交通部道路运输车辆卫星定位系统部标标准大全下载地址...
  11. 2018美国计算机科学专业排名,最新出炉 2018年USNews美国大学研究生计算机科学专业排名榜单...
  12. STM32F103在STM32CubeMX下的应用
  13. echarts图表主题--马卡龙macarons--自己配置主题颜色
  14. Python 画樱花树(樱花树下的约定)
  15. 易基因 | DNA甲基化测序新技术发布:扩展重亚硫酸盐测序(XRBS)
  16. 浅谈大数据风控的基本框架
  17. codevs 2833 奇怪的梦境
  18. 用于宏观经济数据分析的神经网络(Matlab代码实现)
  19. 【嵌入式】Modbus TCP协议详解
  20. 长高黄金训练动作跟着一起学习吧

热门文章

  1. 【算法】创新工场涂鸦移动2017校园招聘测试题-A卷-软件工程师
  2. Security安全框架
  3. CMU 15-213 CSAPP (Ch5~Ch7)
  4. 东方Project题目 1975 红魔馆爆炸了
  5. Java String的split()的用法
  6. 日语汉字上面标注平假名
  7. 【BZOJ1132】【POI2008】Tro(计算几何)
  8. IEEE Geoscience and Remote Sensing Letters (GRSL) 投稿经验
  9. 仿QQ聊天(5)—聊天表情的适配
  10. 焊盘、封装、电路板的创建