单个字符 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]
但我希望 y
和 Y
被引用,因为它们作为布尔值加载回来,因为这是 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]
当我这样做时:
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]
但我希望 y
和 Y
被引用,因为它们作为布尔值加载回来,因为这是 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]