首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >算术运算中的Yaml类型转换变量

算术运算中的Yaml类型转换变量
EN

Stack Overflow用户
提问于 2019-10-14 09:50:00
回答 1查看 1K关注 0票数 1

我有以下YAML文件:

代码语言:javascript
复制
somthing:
  a: &a_num 5 
  b: &b_num 32
  c: !!python/object/apply:eval [ 5 * 32] # works
  d: !!python/object/apply:eval [ *a_num * *a_num] # throws error

错误:

期望字母或数字字符,但找到‘’

我试图键入浮动变量的类型:

c: !!python/object/apply:eval [ *a * float *b]

但这也行不通

如何对变量进行算术操作?

EN

回答 1

Stack Overflow用户

发布于 2019-10-14 11:52:30

如果不编写修改过的加载程序、替代的eval和/或重写YAML,这是行不通的。

如果您尝试加载,那么将其转储如下:

代码语言:javascript
复制
  c: [ 5 * 32]

您可以看到,未引用的标量相当于:

代码语言:javascript
复制
  c: ['5 * 32']

因此,您对single的调用,作为参数,是一个带有单个字符串的列表。

你的YAML必须是有效的,而你的不是,所以你的程序永远不会第二次调用eval。对[ *a_num * *a_num]的解析确实失败,因为该节点开头的*确实排除了解析未引用的标量,因为它被识别为别名。别名被解析(直到a_num之后的空格),然后解析器需要一个逗号来表示下一个list元素或结束的]。它试图再次解析别名,如果可以的话,它仍然会抱怨逗号(尝试使用[ *a_num *a_num]查看这种效果,您将永远不会到达eval调用)。

因此,您要么不得不求助于您自己的认识到如何将元素序列( [*a_num, '*', *a_num] )作为参数来处理(因为这必须是有效的YAML),要么您必须有这样一个替代访问锚/别名机制,并将其呈现给[ '*a_num * *a_num' ]

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58374200

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档