Python 是';是';实际上是';正确';根据YAML 1.1规范?1.2规范?
我试图调试一个问题,它归结为Python 是';是';实际上是';正确';根据YAML 1.1规范?1.2规范?,python,yaml,pyyaml,ruamel.yaml,Python,Yaml,Pyyaml,Ruamel.yaml,我试图调试一个问题,它归结为 >>> import yaml as pyyaml >>> import ruamel.yaml as ruamel >>> ruamel.load("x: yes") == ruamel.load("x: true") False >>> pyyaml.safe_load("x: yes") == pyyaml.safe_load("x: true") True “是”和“否”是保留字,它们
>>> import yaml as pyyaml
>>> import ruamel.yaml as ruamel
>>> ruamel.load("x: yes") == ruamel.load("x: true")
False
>>> pyyaml.safe_load("x: yes") == pyyaml.safe_load("x: true")
True
“是”和“否”是保留字,它们也是true
和false
的同义词
但是只有1.1规范中有,但没有详细说明,并且字符串“yes”根本没有出现在中
事实上,翻阅它只是以一种合法的方式出现在任何一种合法的方式中,并在修订后被删除
我怀疑我在写作过程中回答了自己的问题,但是。。。关于“是/否”的业务是否只是在实现中出现的胡说八道(我的编辑甚至强调“是/否”是特别的),还是我误解或遗漏了规范的一部分?将yaml spec 1.1中的
是
/否
解释为真
/假
,是故意的,是故意的。然而,在yaml规范2.2中,将是
/否
解释为真
/假
被删除
从
PyYAML支持YAML 1.1标准,ruamel.YAML
支持YAML 1.2
2009年发布
YAML 1.2放弃了对几个功能的支持,这些功能未被引用Yes
,No
,On
,Off
在这方面很难比较YAML 1.2和YAML 1.1。具有YAML 1.1中缺少的模式 YAML 1.2规范(base、json、core)中提到的任何模式都没有将
Yes
作为布尔类型提及,并且示例不再使用这些模式,而YAML 1.1仍然使用这些模式
然而,YAML 1.2规范确实提到了核心模式之外的可能模式,包括
不幸的是,该存储库中有一些地方与YAML 1.2相矛盾(例如八进制的表示方式)。因此,在YAML 1.2中完全兼容通用1.1是不可能的
考虑到
Yes
未被提及为布尔值,以及它引起的普遍混乱(有一个问题是为什么Yes
在这里被如此转储时被引用),我决定在ruamel.YAML
中实现YAML 1.2支持时放弃对它的支持。其他一些不太容易混淆的(IMO)和有用的东西,如合并键(唯一提到的似乎是“例如,布尔值“true”也可能写为“yes”。这在我看来根本不是故意的,除非我误解了…和“off”没有出现。@jberryman数据类型在文档规范本身中没有详细讨论。相反,规范引用了各种标记格式的模式文档。核心!!bool
标记的文档在这里:。无可否认,找到它并不容易。不可穿透的规范实际上是YAML的核心批评之一@KonradRudolph谢谢!是的,它看起来在规范中有两处链接。我不太清楚它们是以什么方式“可选”的,或者它们与规范的关系如何,但如果你想感谢你在ruamel上的工作,我会接受你的评论作为回答,它到目前为止真的很有用!
%YAML 1.1
---
x: yes