很抱歉,如果这个问题已经得到解答,我无法想出更好的方法来描述这个问题:/
我们说我有这样的功能:
def func(arg):
if arg something:
return a, b, c, d
else:
return False
所以,当我这样调用这个函数时:
a, b, c, d = func(arg)
并且它发生了,该函数只返回False - 这会产生一个问题(因为我分配4个变量但只得到1个bool)?
答案 0 :(得分:2)
您可以先测试返回的值,然后解压缩:
value = func(arg)
if value:
a, b, c, d = value
当然,当abcd
没有被分配时,您必须处理调用函数中发生的事情。
答案 1 :(得分:2)
是的,它会引发ValueError
。你可以通过用try-except
语句包装作业来处理这个问题:
try:
a, b, c, d = func(arg)
except ValueError:
# pass or do something else
请注意,您还可以检查返回值的验证,但由于它是Easier to ask for forgiveness than permission作为编码风格的方式,因此最好使用try-except
来处理此问题。
答案 2 :(得分:2)
是的,这会导致问题。一般来说,你不想做这样的事情,往往会导致以后出现的意外错误很难捕捉到。 Python允许你通过返回任何你想要的东西来打破规则,但是你应该只在你有充分理由的情况下才能这样做。作为一般规则,您的函数和方法应该返回相同的类型,无论如何(None
除外)。
答案 3 :(得分:1)
具有异构返回类型的函数对于调用者来说很难。
你能重构吗?如果else
情况是失败模式,请考虑在这种情况下使用异常 - python不是golang。
答案 4 :(得分:1)
如果不是使用混合返回类型,只需重构以要求函数有一个truthy参数,否则引发错误?这样,错误将在函数内部而不是在赋值时引发,这对我来说更清晰。
def func(arg):
if not arg:
raise ValueError('func requires a truthy argument')
return a, b, c, d