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"
