能否让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
相关产品推荐
相关产品推荐

