Python返回多个值并检查返回False

时间:2016-12-04 00:00:03

标签: python python-3.x

我看到很多关于如何在函数中返回多个值的好建议,但是还有什么方法可以处理检查其他返回值如False?

例如:

def f():
    if condition1:
        return False
    else:
        return x, y, z

x, y, z = f()

我可以验证if [x, y, z] is not None:但是如何检查False?它只是if [x, y, z] is not None and f() is not False:还是有优越的方式?

3 个答案:

答案 0 :(得分:9)

我认为这有助于提高一致性:

def f():
    if condition1:
        return False, None
    else:
        return True, (x, y, z)

success, tup = f()
if success:
    x, y, z = tup
    # use x, y, z...

答案 1 :(得分:5)

如果你处于一个不幸的情况,你必须处理一个行为与你所呈现的函数类似的函数,一个明确的处理方法是使用<div class="container"> <!-- Start Masthead TopBar --> <div class="masthead_topbar"> Test <!-- End Masthead_TopBar --> </div> <!-- End Container DIV --> </div>语句。

try:

这样做有效,因为尝试解包try: x, y, z = f() except TypeError: <handle the situation where False was returned> 会引发False

如果您可以修改该功能,我可能会认为惯用策略是引发错误(内置或自定义)而不是返回TypeError

False

这有利于在未捕获的回溯中显示错误的真实性质,而不是不那么明显的def f(): if condition1: raise ValueError('Calling f() is invalid because condition1 evaluates to True') return x, y, z try: x, y, z = f() except ValueError: <handle the situation where a tuple could not be returned> 。它还具有提供一致返回类型的好处,因此用户不会产生混淆。

文档也变得更加清晰,因为而不是

TypeError: 'bool' object is not iterable

文档变为

"in the case of success it will return a tuple of three elements, but in the case of failure it will return False (not as a tuple)"

答案 2 :(得分:2)

将结果分配给单个变量并检查它是否为假:

retval = f()
if retval != False:
  x,y,z = retval
else: # False
  ...