, 但发现 '',yaml,anchor,alias"/>

首页 > 解决方案 > 将锚点和别名组合在一行中触发 parserError: 'Expected, 但发现 ''

问题描述

我正在尝试组合锚点和别名,以便以不同的名称将值重用到多个容器中。

我尝试了以下代码:

FWL_GV_NANSEN: &fwl_gv_nansen
  dtype: float
  value: 2715.0

FWL_GV_E3_2: &fwl_gv_e32 *fwl_gv_nansen

目标只是让另一个变量 FWL_GV_E3_2 包含与我稍后可以参考的 FWL_GV_NANSEN 相同的信息。

与在 Python(或其他)中定义相同:

a = 5.0
b = a
c = b

但这会触发以下错误消息:

yaml.parser.ParserError:解析“fwl_2.yml”中的块映射时,第 7 行,第 3 列预期 <块结束>,但发现'<别名>'

有没有办法将别名的内容分配给用于定义新锚的变量(通过不同的变量传播初始值?

PS:也许 YAML 不是最好的语言,因为例如使用 python 的变量会很简单,但我必须使用 YAML

标签: yamlanchoralias

解决方案


YAML 节点属性(即标签和锚点)只能出现在“真实”节点上:集合(块或流)或标量。

您可以从c-ns-properties只能在那里使用的生产规则中看到,但别名部分也明确指出

请注意,别名节点不得指定任何属性 [...]


如果您YAML 解析器允许您访问原始锚点/别名,或一些锚点到节点/对象的映射(例如我ruamel.yaml的 Python 包用于往返时),那么可以使用标记的标量:

FWL_GV_NANSEN: &fwl_gv_nansen
  dtype: float
  value: 2715.0

FWL_GV_E3_2: &fwl_gv_e32 !ref fwl_gv_nansen

使用对象的构造!ref函数解析标量fwl_gv_nansen,以及一些特定于应用程序的代码。通常,锚点和别名事件在作曲之前由作曲家加载步骤解决(如果这样,信息不再可用)。


推荐阅读