我想知道如何最好/最 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)。
