Skip to main content
 首页 » 编程设计

python之当预期有多个返回值时如何很好地从函数返回

2025年05月04日13me-sa

myFunct预计会返回两个值。两个返回值都被捕获到 var_1, var_2 .

作为错误检查,我使用了很多 if/else: return调用函数范围内的语句(在本例中为 myFunct)。打字简单if arg<10: return返回一个单个 None这引发了TypeError: 'NoneType' object is not iterable因为有两个变量:var_1, var_2 = myFunct(5)期待两个返回值但只有一个值 None被退回。

为了避免这样的错误,我必须使用以下语法:

if arg<10: return None, None 

我觉得很丑。

不知道有没有更好的办法...

def myFunct(arg): 
    if arg<10: 
        return 
    return 100, 200 
 
var_1, var_2 = myFunct(5) 

请您参考如下方法:

如果出现问题,正确的解决方案是引发异常。但是,如果您绝对不想这样做,您可以随时:

try: 
    var_1, var_2 = myFunct(5) 
except TypeError: 
    var_1, var_2 = (None,None) 

编辑:

也许您需要考虑如何处理您的 var_1 和 var_2(如果它们确实为 None)。如果您要继续计算 None 是有效输入的计算,那么 return None,None 可能是正确的表达式。然而,如果这是一个异常(exception),并且您将注意到结果为 None,并做一些完全不同的事情(没有两个值),那么您总是可以这样做:

result = myFunct(5) 
if result: 
    var_1,var_2=result 
    do_more_stuff_here_with(var_1 and var_2) # logical and :) 
else: 
    print "myFunct(5) failed - check (and if necessary adjust) the phase of the moon"