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

如何将YAML中结尾带冒号的元素加载为字符串而非字典?

解决YAML末尾带冒号的字符串被解析为字典的问题

YAML语法里,冒号:是键值对的分隔标记,当解析器碰到baz::时,会把baz:当成键,后续空内容当成值,所以解析成了{'baz:' : ''}——哪怕用BaseLoader也遵循这个语法逻辑,因此没效果。

下面提供两种解决思路:

方案1:修改YAML源文件(最简单)

给带冒号结尾的字符串包裹单引号或双引号,强制解析器将其识别为字符串:

foo:
  - bar
  - "baz::"

这样无论用哪种Loader加载,baz::都会被解析成字符串类型。

方案2:自定义Loader(无需修改源文件)

如果没法改动原YAML文件,可以自定义一个Loader,通过添加隐式解析规则,让末尾带::的内容被识别为字符串。示例代码:

import yaml

class StringColonLoader(yaml.Loader):
    def __init__(self, stream):
        super().__init__(stream)
        # 添加隐式解析器,匹配以::结尾的字符串
        self.add_implicit_resolver(
            'tag:yaml.org,2002:str',
            r'^[^\s]+::$',
            list(':')
        )

# 使用自定义Loader加载文件
with open('your_yaml_file.yaml', 'r') as f:
    result = yaml.load(f, Loader=StringColonLoader)
print(result)  # 输出: {'foo': ['bar', 'baz::']}

内容的提问来源于stack exchange,提问作者Mike van Dyke

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 12:54:56