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