Python 为什么在包含return语句的try块之后执行finally块
我想知道为什么函数foo返回3而不是1。请解释一下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块-无论是通过到达末尾、返回还是抛出异常。
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您阅读了副本吗?它解释了正在发生的事情,我肯定错过了。