【问题标题】:python how does this function get to line 10 [duplicate]python这个函数如何到达第10行[重复]
【发布时间】:2018-08-05 08:38:46
【问题描述】:

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

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

print(myfunction(0))

【问题讨论】:

    标签: python python-3.6


    【解决方案1】:

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

    finally 子句总是在离开 try 语句之前执行,无论是否发生异常。当 try 子句中发生异常并且没有被 except 子句处理(或者它发生在 except 或 else 子句中)时,它会在 finally 子句执行后重新引发。

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          猜你喜欢
          • 2015-01-23
          • 2021-10-14
          • 1970-01-01
          • 1970-01-01
          • 2011-06-21
          • 2021-01-28
          • 2013-08-12
          • 2015-02-02
          • 2016-05-02
          相关资源
          最近更新 更多