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

如何用ruamel.yaml将YAML 1.1类布尔字符串以带引号形式输出?

解决ruamel.yaml输出"Y"类字符串自动转为无引号布尔标量的问题
  • 问题本质:ruamel.yaml默认遵循YAML规范,会将YAML 1.1定义的布尔标量(如Y/N/yes/no等)自动处理为布尔类型,输出时不带引号。但Helm基于YAML 1.1解析,会把无引号的Y识别为布尔true,导致数据不符合预期。

  • 实现方案:通过自定义字符串类型并注册专属代表器,强制这类需保留为字符串的布尔标量输出时带引号:

from ruamel.yaml import YAML
import sys

yaml = YAML()

# 自定义标记类,用于区分需要强制加引号的字符串
class QuotedStr(str):
    pass

# 注册代表器,将QuotedStr序列化为带双引号的字符串
@yaml.representer.add_representer(QuotedStr)
def represent_quoted_str(dumper, data):
    return dumper.represent_scalar('tag:yaml.org,2002:str', data, style='"')

# 使用示例
config = {
    'approval_status': QuotedStr('Y'),
    'description': 'regular string'
}

yaml.dump(config, sys.stdout)
  • 输出结果:
approval_status: "Y"
description: regular string
  • 关键提醒:此前测试误用T作为测试对象无意义,因为T不属于YAML 1.1的布尔标量范畴,ruamel.yaml不会自动将其转为布尔值,只有Y/N/yes/no/true/false等才会被自动识别为布尔标量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 07:10:23