python类方法中的双返回

时间:2011-04-07 12:01:07

标签: python return-value

当我调用以下方法时,会执行两次返回,我无法找出原因。

def Build(self, name = None):
    if self.buildData:
        try:
            installData = self.buildData.Build(name)
            return BuildResult(True, installData)
        except:
            pass
    else:
        Log("Application has no <build> data")
    return BuildResult(False, None)

这是怎么回事:

  1. 使用有效字符串调用该方法,例如“abc”
  2. 调用self.buildData.Build(name)并运行BuildResult(True,installData)构造函数
  3. 最后一个return语句也被执行

2 个答案:

答案 0 :(得分:7)

好吧,我猜BuildResult()失败,异常被传递,你进入第二次返回。您可以通过添加一些调试打印来轻松测试它,除非 - 永远不要使异常无声:)

答案 1 :(得分:1)

首先执行return BuildResult(True, installData)执行BuildResult(True, installData)。我的猜测是,这个函数引发了一个被捕获的异常pass。之后执行return BuildResult(False, None)

您应该看到引发了什么异常并正确处理它。

我会按如下方式重写函数:

def Build(self, name = None):
    if self.buildData:
        try:
            installData = self.buildData.Build(name)
        except: # TODO: catch only expected exception
            pass
        return BuildResult(True, installData)
    else:
        Log("Application has no <build> data")
    return BuildResult(False, None)