首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ruamel.yaml八进制( 1.1 )

ruamel.yaml八进制( 1.1 )
EN

Stack Overflow用户
提问于 2017-03-31 08:58:28
回答 1查看 214关注 0票数 1

我试着用PyYAML运行这段代码:

代码语言:javascript
复制
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.1z: 052),这同样有效。我还尝试了以下几点:

代码语言:javascript
复制
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?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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中修复。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43136541

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档