【问题标题】:How to avoid KeyError when working with dpath?使用 dpath 时如何避免 KeyError?
【发布时间】:2021-05-11 09:21:05
【问题描述】:

我正在使用dpath 以更简洁的方式访问嵌套字典。

dpath 我可以做到:

result = dpath.util.get(data, "/data/attributes/policy_revision/policy")

代替:

result = data.get("data", {}).get("attributes", {}).get("policy_revision", {}).get("policy", "")

但是,使用dpath 的唯一问题是,当路径中的任何键都不存在时,我会得到KeyError。而使用get 允许我指定默认值,以防找不到密钥。

我可以尝试捕获KeyError 异常,但这会使代码变得更长和更复杂,失去dpath 最初给我的整洁。

我的问题是,如何在dpath 中指定默认值?

这是他们的文档,但我没有找到任何相关内容:https://pypi.org/project/dpath/

【问题讨论】:

  • 我猜你必须 try / except KeyErrordpath

标签: python dpath


【解决方案1】:

您可以在他们的 github 存储库中找到他们如何处理默认值:

https://github.com/dpath-maintainers/dpath-python/blob/master/dpath/util.py

线路:148,173~175

代码:

import dpath.util
x = {
    "a": {
        "b": {
        "3": 2,
        "43": 30,
        "c": [],
        "d": ['red', 'buggy', 'bumpers'],
        }
    }
}
print(dpath.util.get(x, '/a/b/42', default = -1))
print(dpath.util.get(x, '/a/b/43', default = -1))

结果:

-1
30

【讨论】:

  • 很棒的发现@leaf_yakitori,谢谢!我想知道为什么它没有记录在案
  • @Xar 也许他们忘记记录了,你可以在他们的 github repo 上提出问题来报告。
猜你喜欢
  • 2018-02-11
  • 2018-10-26
  • 2021-01-28
  • 2017-10-19
  • 2019-09-25
  • 2014-09-08
  • 2022-06-10
  • 2021-01-02
  • 2016-03-24
相关资源
最近更新 更多