单个字符 y 和 Y 被转储为 YAML 1.1 布尔值

SIngle character y and Y get dumped as YAML 1.1 booleans

当我这样做时:

from ruamel import yaml

seq = ["x", "y", "z", "Y", "true", True]
print(yaml.dump(seq, version=(1,1)))

它给出:

%YAML 1.1
--- [x, y, z, Y, 'true', true]

但我希望 yY 被引用,因为它们作为布尔值加载回来,因为这是 YAML 1.1。 而且这个 bug,说明这个问题是 解决了。​​

为什么这个错误标记为已关闭,即使在 ruamel.yaml>=0.15.93 版本上它仍然显示此错误?

您正在使用不安全的 PyYAML 兼容性函数 dump()(而且您这样做的方式效率低下)。该函数已过时但模拟了 PyYAML 的错误行为。

你 应该改为 实例化一个 YAML() 实例并使用它的 .dump() 方法。

import sys
import yaml as pyyaml
import ruamel.yaml

seq = ["x", "y", "z", "Y", "true", True]
print("PyYAML version:", pyyaml.__version__)
pyyaml.dump(seq, sys.stdout, default_flow_style=None, explicit_start=True, version=(1,1))
print()

yaml = ruamel.yaml.YAML(typ='safe')
yaml.version = (1,1)
yaml.default_flow_style=None
print("ruamel.yaml version:", ruamel.yaml.__version__)
yaml.dump(seq, sys.stdout)

给出:

PyYAML version: 5.3.1
%YAML 1.1
--- [x, y, z, Y, 'true', true]

ruamel.yaml version: 0.16.10
%YAML 1.1
--- [x, 'y', z, 'Y', 'true', true]