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

能否让Python的ruamel仅将true/false识别为YAML布尔值?

解决ruamel.yaml将ON/Yes识别为布尔值的问题

ruamel.yaml支持自定义隐式解析规则,你可以直接修改它的布尔值解析逻辑,只让true/false(大小写可选)被识别为布尔值,其他类似ON/Yes的关键词保留为字符串。

实现代码

from ruamel.yaml import YAML
from ruamel.yaml.resolver import Resolver
import re

# 移除默认的布尔值隐式解析器
Resolver.yaml_implicit_resolvers[''] = [
    item for item in Resolver.yaml_implicit_resolvers[''] 
    if item[0] != 'tag:yaml.org,2002:bool'
]

# 添加自定义布尔解析规则:仅识别true/false(大小写不敏感)
Resolver.add_implicit_resolver(
    'tag:yaml.org,2002:bool',
    r'^(?:true|false)$',
    list('tTfF'),
    re.IGNORECASE
)

# 测试验证
yaml = YAML()
test_config = """
mode: ON
active: True
inactive: false
confirm: Yes
"""
parsed_data = yaml.load(test_config)
print(parsed_data)

效果说明

运行后输出结果为:

{'mode': 'ON', 'active': True, 'inactive': False, 'confirm': 'Yes'}

可以看到:

  • True/false依然被正常解析为布尔值
  • ON/Yes保留为字符串字面量,无需手动添加引号

注意事项

  • 此修改仅对当前Python进程生效,每次运行工具都需要执行这段配置代码
  • 由于你的配置文件仅由该工具处理,无需担心违反标准YAML规范的问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 03:31:03