Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python类方法中的双返回_Python_Return Value - Fatal编程技术网

python类方法中的双返回

python类方法中的双返回,python,return-value,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

当我调用下面的方法时,会执行两个返回,我不知道为什么

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)
结果是:

使用有效字符串(如abc)调用该方法 调用self.buildData.Buildname并运行BuildResultTrue、installData构造函数 最后一个return语句也会执行
好吧,我猜BuildResult失败了,异常被传递,您进入第二次返回。您只需在except中添加一些调试打印即可轻松测试它。永远不要让异常保持沉默:

当返回BuildResultTrue时,执行installData BuildResultTrue,首先计算installData。我的猜测是,这个函数会引发一个异常,该异常被捕获并传递。在返回BuildResultFalse之后,将不执行任何操作

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

我将重写函数如下:

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)

请修复except:子句以打印实际引发的异常。这将帮助您了解正在发生的事情。什么是self.buildData?您确定它不是对父类的引用吗?