具有多个退货选项的功能

时间:2016-09-26 16:50:14

标签: python function return

很抱歉,如果这个问题已经得到解答,我无法想出更好的方法来描述这个问题:/

我们说我有这样的功能:

def func(arg):
    if arg something:
        return a, b, c, d
    else:
        return False

所以,当我这样调用这个函数时:

a, b, c, d = func(arg)

并且它发生了,该函数只返回False - 这会产生一个问题(因为我分配4个变量但只得到1个bool)?

5 个答案:

答案 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