首页 > 解决方案 > 仅将非 None 值作为参数传递给函数

问题描述

我有一个 for 循环,根据选择的字段返回一个值或 None。

对于循环:

for fieldname, value in form.data.items():
    if value is not None:
        print(value)

下面给出的是for 循环的 print 语句的输出:

store_name
None
store_location
None

我正在尝试将上述循环语句的输出传递给如下所示的函数:

output = store_details() <<-- arguments to this function to only include non None items obtained from the above for loop statement

仅在上面的示例中store_name,并且store_location应该作为参数传递。我怎么能只传递非 None项作为参数?请注意,列表参数每次都可能不同,因此我正在尝试构建此函数,以便 store_details 函数每次仅传递非 None 值。

更新:

下面给出的是我要执行的循环。如果选择了所有字段(页面中有 5 个字段可供用户选择),这将正常工作。

l = []
    for fieldname, value in form.data.items():
        if value is not None:
            l.append(value)
print(l)

p = l[:-1]

output = store_details(*p)

如果没有选择任何字段,它会返回一个“无”,它会抛出

psycopg2.ProgrammingError: column "none" does not exist in table

标签: pythonpython-3.x

解决方案


实际上,您可以通过多种方式做到这一点。一个是字典理解:

fields = {field:value for field,value in form.data.items() if value != None and value != 'None' and field != 'csrf_token'}
output = store_details(**fields)

更新 我已经包含了“无”检查并排除了 csrf_token。请使用and运算符,而不是or.


推荐阅读