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

YAML无引号标量能否包含冒号?ruamel.yaml安全加载器报错咨询

问题

原本以为YAML无引号标量可以包含冒号,但使用ruamel.yaml 0.18.10解析以下YAML时,因标量中的冒号被拒绝:

a: {s: D:G}

请问这是ruamel.yaml的bug,还是该标量本就无效需加引号?

复现代码:

from ruamel.yaml import YAML

s = r"""a: {s: D:G}
"""
yaml = YAML(typ="safe")
yaml.load(s)

经测试,仅当YAML对象配置为typ='safe'时存在此问题,其他加载器可正常解析。

解答
  • 这不是ruamel.yaml的bug,是safe模式的严格解析规则导致的结果。
  • YAML无引号标量确实允许包含冒号,但在流样式映射({}包裹的结构)中,未加引号的D:G会引发解析歧义:safe加载器会将冒号视为键值对的分隔符,误以为D是新键、G是对应值,从而判定格式错误。
  • 非safe模式(如默认的typ='rt')采用了更宽松的解析逻辑,能自动识别这是单个标量,所以可以正常解析。
  • 要让safe模式正常解析,需给包含冒号的标量添加引号消除歧义,写法如下:
    a: {s: 'D:G'}
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 09:47:02