这是一些行为特殊的代码。这是我编写的行为的简化版本。这仍然会显示出怪异的行为,我对为什么会发生这种现象有一些特定的疑问。我在Windows 7上使用Python 2.6.6。def demo1(): try: raise RuntimeError,"To Force Issue" except: return 1 else: return 2 finally: return 3def demo2(): try: try: raise RuntimeError,"To Force Issue" except: return 1 else: return 2 finally: return 3 except: print 4 else: print 5 finally: print 6结果:>>> print demo1()3>>> print demo2()63为什么演示1返回3而不是1?为什么演示2打印6而不是打印6 w / 4或5?
3 回答
阿波罗的战车
TA贡献1862条经验 获得超6个赞
因为保证可以执行finally语句(因此,假定没有断电或Python无法控制的任何事情)。这意味着在函数可以返回之前,它必须运行finally块,该块返回一个不同的值。
在Python文档状态:
当在try ... finally语句的try套件中执行return,break或Continue语句时,finally子句也会在“出路”上执行。在finally子句中,continue语句是非法的。(原因是当前实施存在问题-将来可能会取消此限制)。
这意味着,当您尝试返回时,将finally调用该块,并返回其值,而不是原来的值。
呼啦一阵风
TA贡献1802条经验 获得超6个赞
执行顺序为:
尝试阻止所有正常完成->最终阻止->函数结束
尝试运行块并进入异常A->最终阻塞->函数结束
尝试块返回值并调用返回->最终阻止->弹出返回值->函数结束
因此,finally块中的任何返回都将提前结束步骤。
添加回答
举报
0/150
提交
取消