我有以下YAML文件:
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]
但这也行不通
如何对变量进行算术操作?
发布于 2019-10-14 11:52:30
如果不编写修改过的加载程序、替代的eval和/或重写YAML,这是行不通的。
如果您尝试加载,那么将其转储如下:
c: [ 5 * 32]您可以看到,未引用的标量相当于:
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' ]。
https://stackoverflow.com/questions/58374200
复制相似问题