ruamel.yaml八进制在1.1

时间:2017-03-31 08:58:29

标签: python yaml pyyaml ruamel.yaml

我尝试使用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中的错误?

1 个答案:

答案 0 :(得分:0)

是的,这是ruamel.yaml 0.14.2中的错误。

1.1和1.2整数的隐式解析器都包含0o模式,只有1.2的模式应该具有该模式。旧模式(匹配052)仅在要求版本1.1时可用。

这应该在ruamel.yaml> = 0.14.3

中修复