我尝试使用PyYAML运行此代码:
from yaml import safe_load
data = safe_load("""\
%YAML 1.2
---
x: 42
y: 0x2a
z: 0o52
""")
assert data['x'] == data['y'] == data['z']
并没想到它会抛出一个断言错误。在我阅读了更多文档(通过http://yaml.org/找到)之后,我意识到PyYAML不久前已经死了,并且从未支持YAML 1.2规范中的八进制整数。
使用ruamel.yaml(from ruamel.yaml import safe_load
),上述工作正常。
出于好奇,我尝试使用旧的八进制格式ruamerl.yaml(YAML 1.1
位于顶部z: 052
),这也很有用。我也尝试了以下内容:
from ruamel.yaml import safe_load
data = safe_load("""\
%YAML 1.1
---
x: 42
y: 0x2a
z: 0o52
""")
assert data['x'] == data['y'] == data['z']
期望它抛出一个错误,因为data['z']
应该是一个字符串,而不是整数42.这不会引发错误,我想应该这样做。
我的期望是错误的,还是ruamel.yaml中的错误?
答案 0 :(得分:0)
是的,这是ruamel.yaml 0.14.2中的错误。
1.1和1.2整数的隐式解析器都包含0o模式,只有1.2的模式应该具有该模式。旧模式(匹配052
)仅在要求版本1.1时可用。
这应该在ruamel.yaml> = 0.14.3
中修复