3 回答

TA贡献1864条经验 获得超2个赞
我会将 YAML 文件更改为:
ToPrint:
var: something
Code: print("{var}".format(**d['ToPrint']))
并且由于您使用的是 Python3 还使用Path:
import sys
import ruamel.yaml
from pathlib import Path
yaml = ruamel.yaml.YAML()
d = yaml.load(Path('file.yaml'))
eval(d['Code'])
这使:
something
请注意,变量d 必须与值中的相同Code
使用{{var}}看起来更像是一个(jinja2)模板。你不能直接评估那些,你需要扩展模板然后全部评估。

TA贡献1810条经验 获得超4个赞
您可以ToPrint在eval以下位置用作局部变量:
with open("file.yaml", "r") as file:
yaml_ = yaml.load(file)
eval(yaml_['Code'], yaml_['ToPrint'])
和 yaml 文件:
ToPrint:
var: something
Code: print(f"{var}")

TA贡献1828条经验 获得超3个赞
扩展丹尼尔的回答:
yaml 文件:
Const:
c1: 10
c2: 20
Expression: var1 * var2 + c1 / c2
代码:
import yaml
with open("formula.yaml", "r") as file:
yaml_ = yaml.load(file)
res = eval(yaml_['Expression'],
{'var1':4, 'var2':2},
yaml_['Const'])
print(res)
添加回答
举报