用替代输入再次调用函数的大多数pythonic方法

时间:2018-07-31 21:41:13

标签: python

我正在研究一些查询数据库的软件。特别是,如果您使用某个参数查询数据库,它将找不到匹配的值,因此您应该使用其他参数再次查询它。

下面是概述问题的简短脚本。 query_db只是一个伪函数,旨在模仿对包含由1索引的条目的数据库的查询行为。在get_db_params函数中,我使用a参数查询数据库。如果返回None,那么我将使用b参数重试。如果那也返回None,则get_db_params会引发错误。

get_db_paramsd1作为参数调用d2会返回“ some_value”,而d3会引发KeyError

我的问题是:这似乎不是很Python,特别是连续有两个if params is None:。关于如何改善这些功能的任何建议?

def query_db(x):
    if x == 1:
        return "some_value"
    else:
        return None

def get_params(d):
    params = query_db(d['a'])
    if params is None:
        params = query_db(d['b'])
    if params is None:
        raise KeyError("Params not found in db")
    return params

d1 = {'a': 1, 'b': 1}
d2 = {'a': 0, 'b': 1}
d3 = {'a': 0, 'b': 0}

params = get_params(d1)
params = get_params(d2)
params = get_params(d3)

1 个答案:

答案 0 :(得分:3)

我认为您最初写的没问题。

可能有效的另一种说法:

def get_params(d):
    for k in ['a', 'b']:
        params = query_db(d[k])
        if params is not None:
            return params
    raise KeyError("Params not found in db")