Skip to main content
 首页 » 编程设计

python之"if possible, do it"的 pythonic 方式是什么

2025年05月04日22sky-heaven

我想知道如何最好/最 pythonic 来编写这种情况:如果可以做到,那就去做吧。如果没有:就离开吧。

例子: 我有一个从数据库加载数据的函数。如果指定了可写目标,则数据将写入文件。不管文件是否被写入,数据总是被返回。我当然可以检查是否有可写位置,如果有,则将数据写入文件。然而,这似乎是一种非 pythonic 方式,我认为“请求宽恕比获得许可更好”。

我是这样实现的:

def loadData(dest=False): 
    data = someDBRequest() 
    try: 
        with open(dest, 'w') as fh: 
            json.dump(data, fh) 
    except: 
        pass 
    return data 

这在某种程度上感觉很糟糕,因为我实现了一个无用的 except,毕竟我希望 dest 不会总是设置到一个位置,因为可以在不设置它的情况下调用该函数。我也觉得这不是应该以某种方式记录或处理的错误。

这是正确的方法还是您会建议更好/更 pythonic 的方法?

请您参考如下方法:

在这个特定的例子中,我会将 dest 默认为 None,并明确检查它是否为 None。

如果您还想在 dest 给出但无效时安静地失败,您可以使用您的方法。但是,我主张用 except IOError 替换包罗万象的 except 子句。否则,您可能会遇到诸如 SyntaxError 等问题。

def loadData(dest=None): 
    data = someDBRequest() 
    if dest: 
       try: 
           with open(dest, 'w') as fh: 
               json.dump(data, fh) 
       except IOError: 
           pass 
    return data 

一般来说,如果您确实依赖于“请求宽恕比获得许可更好”的成语,我认为最好在 try block 中放置尽可能少的代码,并捕获尽可能少的异常(exception)。