我试着调试一个问题,它归结为。。。你知道吗
>>> 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关于“是”和“否”是保留字,它们分别是true
和false
的同义词。你知道吗
但是在1.1规范中只有passing mention,没有详细说明,字符串“yes”根本没有出现在1.2 spec中。你知道吗
事实上,通过every draft of the spec查看,它只以合法的方式出现在https://yaml.org/spec/history/2002-09-01.html中的任何合法方式中,并且在之后的修订中被删除。你知道吗
我怀疑我在写作过程中回答了自己的问题,但是。。。关于“是/否”的业务是否只是在实现过程中出现的无稽之谈(我的编辑器甚至将“是/否”作为特殊的强调),或者我是否误解或遗漏了规范的一部分?你知道吗
在yaml规范1.1中,将
yes
/no
解释为true
/false
是有意的,而且是设计的,是documented。然而,在yaml规范2.2中,将yes
/no
解释为true
/false
被删除。你知道吗从PyYAML Documentation开始
在这个地区很难比较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年被替换)。你知道吗
如果您的文档不是隐式的,而是有标题:
然后
ruamel.yaml
也将yes
作为布尔值加载,默认情况下ruamel.yaml
默认加载yaml1.2,而PyYAML仍然(部分)支持加载yaml1.1相关问题 更多 >
编程相关推荐