You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中是否有类似JavaScript可选链的简洁嵌套对象遍历方式?

Python中类似JavaScript可选链的简洁嵌套访问方案

JavaScript里的可选链?.可以安全遍历深度嵌套的对象,避免键不存在时的报错,比如:

const foo= {
    correct: {
        key: 'nested'
    }
}
const correct = foo?.correct?.key
const incorrect = foo?.incorrect?.key  // 返回undefined,不会报错

你提到用嵌套getattr的Python写法太繁琐,这里提供几种更简洁的实现方式:

一、针对嵌套字典:链式dict.get()

字典可以直接链式调用get(),每次给不存在的键指定默认空字典,就能安全访问深层键:

foo = {
    "correct": {
        "key": "nested"
    }
}
correct = foo.get("correct", {}).get("key")
incorrect = foo.get("incorrect", {}).get("key")  # 返回None,无报错

嫌每次写默认值麻烦的话,封装个工具函数更省心:

def safe_get(obj, *keys):
    for key in keys:
        obj = obj.get(key, None)
        if obj is None:
            break
    return obj

# 调用示例
correct = safe_get(foo, "correct", "key")
incorrect = safe_get(foo, "incorrect", "key")

二、针对类实例对象:封装安全属性访问函数

如果是访问类的嵌套属性,嵌套getattr确实笨拙,写个通用函数就能解决:

def safe_getattr(obj, *attrs, default=None):
    for attr in attrs:
        obj = getattr(obj, attr, default)
        if obj == default:
            break
    return obj

# 调用示例
class Foo:
    def __init__(self):
        self.correct = type('Correct', (), {'key': 'nested'})()

foo = Foo()
correct = safe_getattr(foo, "correct", "key")
incorrect = safe_getattr(foo, "incorrect", "key")  # 返回None

三、Python 3.10+:用结构模式匹配简化

Python 3.10及以上版本支持结构模式匹配,能直观解构嵌套对象或字典:

处理字典:

foo = {"correct": {"key": "nested"}}

# 获取存在的键值
match foo:
    case {"correct": {"key": value}}:
        correct = value
    case _:
        correct = None

# 获取不存在的键值
match foo:
    case {"incorrect": {"key": value}}:
        incorrect = value
    case _:
        incorrect = None

处理类对象:

class Foo:
    def __init__(self):
        self.correct = type('Correct', (), {'key': 'nested'})()

foo = Foo()

match foo:
    case Foo(correct=Correct(key=value)):
        correct = value
    case _:
        correct = None

内容的提问来源于stack exchange,提问作者Ucinorn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 06:15:16