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

ruamel.yaml 0.17.16-1版本dump时数组前带注释致首元素格式异常

问题原因

这不是配置错误,是Ubuntu软件源提供的ruamel.yaml 0.17.16-1版本自带的bug:当数组(序列)正前方存在注释、且数组元素为换行书写的键值对(块式映射)时,注释关联的格式状态标记没有被正确重置,导致数组第一个元素内的多个键值对被错误压缩到同一行输出。
这个bug和注释的缩进位置无关,只要数组前紧邻注释就会触发,和观察到的现象完全吻合。

解决方法

根据实际环境限制二选一即可:

  • 升级ruamel.yaml版本:不要使用apt源提供的旧版本,通过pip安装0.17.20及以上版本的ruamel.yaml即可,新版本已经修复了这个注释关联序列项的格式问题,现有的indent、compact配置不需要做任何修改,直接运行原有代码就能输出正确格式。
  • 无法升级版本时加临时规避逻辑:如果服务器环境限制不能随意升级软件包,可以在加载完YAML数据后,手动清除数组首项上错误绑定的注释标记,修改后的完整代码如下:
import sys
import ruamel.yaml

yaml_str = """\
top_level:
  # comment
  -
    key1: "1"
    key4: "4"
  -
    key2: "2"
    key5: "5"
"""

yaml = ruamel.yaml.YAML()
yaml.indent(mapping=2, sequence=4, offset=2)
yaml.compact(seq_map=False)
data = yaml.load(yaml_str)

# 适配0.17.16版本:清除首项错误绑定的注释标记
if hasattr(data['top_level'], 'ca'):
    data['top_level'].ca.items.pop(0, None)

yaml.dump(data, sys.stdout)

运行后即可得到符合预期的输出:

top_level:
  # comment
  -
    key1: '1'
    key4: '4'
  -
    key2: '2'
    key5: '5'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 15:48:15