在 YAML 中执行算术运算?

新手上路,请多包涵

有时我必须在配置文件中指定时间(以秒为单位),而且写精确的秒数很烦人 - 相反我想执行算术以便我可以使用:

 some_time: 1 * 24 * 60 * 60

而不是确切的:

 some_time: 86400

不幸的是,在使用这一行时: some_time: 1 * 24 * 60 * 60 ,它会将配置行视为一个字符串。当然,我可以使用 - eval(config['some_time']) 但我想知道是否可以在 YAML 中执行算术运算?

原文由 Lucas 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.7k
2 个回答

我不认为有。至少不符合规范( http://yaml.org/spec/1.2/spec.html )。人们向 yaml 添加非官方标签(维基百科似乎说有关于 yield 标签的提议,尽管他们没有说明谁提议或在哪里提议: http ://en.wikipedia.org/wiki/YAML#cite_note-16) ,但是在 pyyaml 中似乎没有你需要的东西。

查看 pyyaml 特定标签似乎没有任何有趣的东西。虽然 !!timestamp '2014-08-26' 在您的某些场景中可能很方便 ( http://pyyaml.org/wiki/PythonTagScheme )。

原文由 Rafael Almeida 发布,翻译遵循 CC BY-SA 3.0 许可协议

这可以通过使用 PyYAML 提供的特定于 Python 的标签来完成,即:

 !!python/object/apply:eval [ 1 * 24 * 60 * 60 ]

如下所示:

 In [1]: import yaml

In [2]: yaml.load("!!python/object/apply:eval [ 1 * 24 * 60 * 60 ]")
Out[2]: 86400

这自然与执行 eval(config['some_time']) 相同,但您不必在程序中显式处理它。

原文由 Art Vandelay 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题