首页 > 解决方案 > 是否有任何替代方法来检查特定索引的值是否在 python 列表中为空

问题描述

def fn():
    return {'Name': 'John'}, False #, {'extra': 'welcome', 'to': 'dev@dsds.com'}

results, *returns = fn()

is_multiple = returns[0] if len(returns) > 0 else False
extra_params = returns[1] if len(returns) > 1 else None

print(is_multiple)
print(extra_params)

检查是否为空的任何其他替代方法extra_params

除了上述len解决方案或不使用trycatchIndexError异常处理程序..

标签: pythonlist

解决方案


更好的解决方案是将函数返回的值定义为三值元组,如果没有值,则使用None或为空,例如:dict

def fn():
    return {'Name': 'John'}, False, None

results, is_multiple, extra_params = fn()

这要简单得多,并且避免了检查长度的需要。

例如,如果您正在编写向后兼容的代码,另一种方法是不预先进行元组解包,例如:

def fn():
    return {'Name': 'John'}, False, # {}

response = fn()

# At least two items must be returned else length might not be valid.
if len(response) == 2:
    results, is_multiple = response
    extra_params = None
elif len(response) == 3:
    results, is_multiple, extra_params = response
else:
    raise ValueError("Unexpected response...")

虽然我会推荐第一个更简单的设计,但有很多方法会搞乱第二个设计并导致意外错误。


推荐阅读