根据yaml1.1规范,'yes'真的是'true'的别名吗?1.2规范?

2024-05-20 01:06:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着调试一个问题,它归结为。。。你知道吗

>>> 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

internet上有rumors关于“是”和“否”是保留字,它们分别是truefalse的同义词。你知道吗

但是在1.1规范中只有passing mention,没有详细说明,字符串“yes”根本没有出现在1.2 spec中。你知道吗

事实上,通过every draft of the spec查看,它只以合法的方式出现在https://yaml.org/spec/history/2002-09-01.html中的任何合法方式中,并且在之后的修订中被删除。你知道吗

我怀疑我在写作过程中回答了自己的问题,但是。。。关于“是/否”的业务是否只是在实现过程中出现的无稽之谈(我的编辑器甚至将“是/否”作为特殊的强调),或者我是否误解或遗漏了规范的一部分?你知道吗


Tags: import规范falsetrueyaml过程as方式
2条回答

在yaml规范1.1中,将yes/no解释为true/false是有意的,而且是设计的,是documented。然而,在yaml规范2.2中,将yes/no解释为true/false被删除。你知道吗

PyYAML Documentation开始

PyYAML supports the YAML 1.1 standard, ruamel.yaml supports YAML 1.2 as released in 2009.

YAML 1.2 dropped support for several features unquoted Yes, No, On, Off

在这个地区很难比较yaml1.2和yaml1.1。YAML 1.2具有yaml1.1中不存在的模式。你知道吗

yaml1.2规范中提到的模式(base、json、core)都没有提到Yes是布尔类型,示例不再使用这些,而yaml1.1仍然有这些。你知道吗

然而,yaml1.2规范确实提到了核心模式之外的可能模式,包括language independent type repository的部分 不幸的是,存储库中有一些区域与yaml1.2相矛盾(比如八进制是如何表示的)。因此,在yaml1.2中完全兼容通用的1.1是不可能的。你知道吗

考虑到没有提到Yes是一个布尔值,以及它造成的普遍混乱(有一个问题是为什么Yes在这里转储时被引用),我决定在ruamel.yaml中实现yaml1.2支持时放弃对它的支持。其他一些不那么容易混淆(IMO)和有用的东西,比如merge键(<<)在ruamel.yaml中(还有一些不太有用的元素,比如value键)。你知道吗

但是PyYAML只支持yaml1.1标准(在2009年被替换)。你知道吗

如果您的文档不是隐式的,而是有标题:

%YAML 1.1
 -
x: yes

然后ruamel.yaml也将yes作为布尔值加载,默认情况下ruamel.yaml默认加载yaml1.2,而PyYAML仍然(部分)支持加载yaml1.1

相关问题 更多 >