python此功能如何到达第10行

时间:2018-08-05 08:38:47

标签: python python-3.6

我希望myfunction返回0而不执行finally,但是为什么这样做呢?

def myfunction(i):
    try:
        result=10/i
    except:
        return 0
    finally:
        return 10 

print(myfunction(0))

3 个答案:

答案 0 :(得分:0)

无论catch块中发生了什么,finally部分中的代码都将运行(除了您的程序在到达finally部分之前以某种方式终止的时间),如果您不希望它运行,则应像这样更改代码:

def myfunction(i):
    try:
        result=10/i
    except:
        return 0
    return 10

答案 1 :(得分:0)

finally始终执行,无论是否发生异常。在本质上,文档非常清楚:

  

无论是否发生异常,始终在离开try语句之前执行finally子句。如果try子句中发生了异常且未由except子句处理(或在except或else子句中发生),则在执行finally子句后重新引发该异常。

因此return子句中的finally语句将覆盖exception子句中的语句。将return语句放在finally子句中没有多大意义,因为这将是从函数返回的唯一值。

答案 2 :(得分:0)

它返回10是因为finally块中的try子句在this answer所示的任何return语句之前执行。

还值得注意的是,您使用的是通用的except,这会导致很多意想不到的行为。检查this answer,以了解如何最好地构造try/except块和最佳raise异常。