Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么在包含return语句的try块之后执行finally块_Python_Python 2.7_Try Catch_Try Catch Finally - Fatal编程技术网

Python 为什么在包含return语句的try块之后执行finally块

Python 为什么在包含return语句的try块之后执行finally块,python,python-2.7,try-catch,try-catch-finally,Python,Python 2.7,Try Catch,Try Catch Finally,我想知道为什么函数foo返回3而不是1。请解释一下 def foo(): try: return 1 except: return 2 finally: return 3 finally块执行时不考虑异常。看看这个 更详细地说,finally子句总是在try语句结束之前执行。下面是示例。Finally始终是执行try块后发生的最后一项 是的,finally块被执行,但是流离开try块-无论是通过到达末尾、返回还是抛出异常。

我想知道为什么函数foo返回3而不是1。请解释一下

def foo():
    try:
        return 1
    except:
        return 2
    finally:
        return 3

finally块执行时不考虑异常。看看这个


更详细地说,
finally
子句总是在
try
语句结束之前执行。下面是示例。

Finally始终是执行try块后发生的最后一项


是的,finally块被执行,但是流离开try块-无论是通过到达末尾、返回还是抛出异常。

但是它如何跳过
返回1
?在提到的try块中,没有引发异常。是的,但关键是finally块在离开try语句之前执行。不知道为什么人们会否决这个,这是正确的。因为finally块中有一个return语句,所以整个函数退出。如果没有,它将返回到try语句,根据是否存在异常进行尝试并继续。@TheSoundDefense当
最后运行
块时它“暂停”(保证总是这样),然后由于该块中的
return
永远不会“取消暂停”(因为函数现在已经结束)。因为这正是<代码>最终<代码>的目的-始终运行。请在发布前搜索:当提到明确的返回语句时,这有什么意义?@nik_kgp您阅读了副本吗?它解释了正在发生的事情,我肯定错过了。