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

如何在PyYAML中覆盖Base Resolver?实现遇问题求助

解决PyYAML将on解析为布尔值True的问题

你的代码无效是因为直接修改BaseResolver的隐式解析器不会影响已继承的FullLoader子类(即你的CustomLoader)。PyYAML的每个Loader类维护独立的解析器列表,必须直接在自定义Loader中修改布尔类型的解析规则。

正确实现步骤

  1. 自定义Loader继承自FullLoader,先移除其中默认的布尔隐式解析器
  2. 添加新的布尔解析规则,排除on/On/ON的匹配

修正后的代码

import yaml
import re

class CustomLoader(yaml.FullLoader):
    pass

# 移除CustomLoader中默认的布尔隐式解析器
if 'tag:yaml.org,2002:bool' in CustomLoader.yaml_implicit_resolvers:
    CustomLoader.yaml_implicit_resolvers['tag:yaml.org,2002:bool'] = []

# 添加自定义布尔解析规则,排除on/On/ON
CustomLoader.add_implicit_resolver(
    'tag:yaml.org,2002:bool',
    re.compile(
        r'''^(?:yes|Yes|YES|no|No|NO
            |true|True|TRUE|false|False|FALSE
            |off|Off|OFF)$''',
        re.X
    ),
    list('yYnNtTfFoO')
)

# 加载YAML文件
with open(file_path, 'r') as file:
    yaml_content = yaml.load(file, Loader=CustomLoader)

效果说明

使用这个自定义Loader解析你的YAML文件后,on会被保留为字符串键,不会被转换为True,解析结果与原YAML结构一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 15:02:24