我试着用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),上面的工作就像预期的那样。
出于好奇,我尝试了使用旧的八进制格式的ruamel.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中的一个bug?
发布于 2017-03-31 10:31:04
是的,这是ruamel.yaml 0.14.2中的一个bug。
1.1和1.2的整数的隐式解析器都包含0o模式,只有1.2的解析器应该包含0 o模式。旧模式(匹配的052)只有在要求1.1版本时才可用。
这应该在ruamel.yaml>=0.14.3中修复。
https://stackoverflow.com/questions/43136541
复制相似问题