Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/113.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 这是有效的YAML文件吗?_Python_Parsing_Yaml_Pyyaml_Ruamel.yaml - Fatal编程技术网

Python 这是有效的YAML文件吗?

Python 这是有效的YAML文件吗?,python,parsing,yaml,pyyaml,ruamel.yaml,Python,Parsing,Yaml,Pyyaml,Ruamel.yaml,考虑以下文件: - k0: v0 vars: &splat0 VAR0: potato # vars from blob0 - k1: v1 vars: &splat1 VAR1: spud # vars from blob1 - k: v extra: # merged vars from blob0 + blob1 <<: *splat0 <<: *splat1 -k0:v0

考虑以下文件:

- k0: v0
  vars: &splat0
    VAR0: potato  # vars from blob0

- k1: v1
  vars: &splat1
    VAR1: spud    # vars from blob1

- k: v
  extra:          # merged vars from blob0 + blob1
    <<: *splat0
    <<: *splat1
-k0:v0
变量:&splat0
VAR0:potato#来自blob0的vars
-k1:v1
变量:&splat1
VAR1:blob1的spud#vars
-k:v
额外:#合并blob0+blob1的变量

合并键与任何其他键一样,只有在YAML解析器实现合并键扩展时(不必这样做),才会以特殊定义的方式对它们进行解释。在我看来,这是无效的YAML

但是还有另一个反对这一点的论点,即使合并键非常特殊,它不遵循正常的键限制。假设您的输入文件如下所示:

- k0: v0
  vars: &splat0
    VAR0: potato  # vars from blob0
    VAR2: tater

- k1: v1
  vars: &splat1
    VAR1: spud    # vars from blob1
    VAR2: tuber

- k: v
  extra:          # merged vars from blob0 + blob1
    <<: *splat0
    <<: *splat1

“PyYAML解析并合并键,但是注释丢失了”,所以它是有效的?我不确定你想做什么,但我不确定这个问题是否能概括它。我确实希望保留评论,而不是破坏合并(我无法控制输入)。但这不是这个问题的重点,这个问题的范围要小得多:YAML规范中是否允许使用重复的合并键。这是否回答了您的问题?答案在建议的副本中正确合并并保留注释。我确信。这个问题是关于YAML规范是否允许重复的合并键。这个问题的答案并没有解决这个问题(他们实际上是《鲁阿迈尔》的作者,所以这将是一个利益冲突)。但是这篇文章还是很有趣的,所以谢谢你的链接。嗨,安顿,我对另一个例子不感兴趣,因为在解析合并后,键VAR2是非唯一的。因此,无论如何,它都不应该成功解析。我们一致认为PyYAML在这里被安装了窃听器,而且他们一直以来都有一个悬而未决的问题……是什么让你认为
VAR2
必须是唯一的。合并规范在序列中明确提到映射节点中较早的
键会覆盖在后面的映射节点中指定的键。
(IIRC PyYAML对有效的
[*splat0,*splat1]
情况也是错误的)。因为在检查重复之前解析映射键更有意义,否则,您无法检测到相等键上的冲突,例如
0xf
15
。看起来PyYAML正确地合并了
[*BIG、*LEFT、*SMALL]
,即最终的映射以
'r':10结束。你有其他的失败模式吗?我不知道,但如果你想征求我的意见,我认为YAML已经太复杂了,我根本不喜欢合并语法。顺便说一句,它似乎也是检测重复密钥的ruamel.yaml错误,例如,这里的最后一个示例:
      <<: [*splat0, *splat1]