2011-04-07 65 views
0

当我调用下面的方法时,两个返回被执行,我找不到原因。python类方法中的双重返回

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(名称)被调用,BuildResult(真,installData )构造函数运行
  3. 最后返回语句也执行
+2

请解决您的“除外”条款来打印这实际上是在那里长大的例外。这将帮助你看到发生了什么。 – 2011-04-07 12:05:22

+1

什么是'self.buildData'?你确定它不是回到父类的引用吗? – 2011-04-07 12:07:05

回答

7

嗯,我想这BuildResult()失败,例外的是通过,你进入第二次回报。您可以通过添加一些调试打印来轻松地进行测试 - 除非 - 使得例外无声无息:)

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)