【发布时间】:2017-02-20 17:05:43
【问题描述】:
我正在编写能够读取 YAML 文件并在 PySB 中生成基于规则的模型的 python 代码。
YAML 文件中的新规则指定如下:
--- !rule
name: L_binds_R
reaction:
L(unbound) + R(inactive) >> L(bound)%R(active)
rates:
- Kf
有了这个,我在 python 中创建了一个 pyyaml 对象(pyyaml 是一个在 python 中使用 yaml 的包),并且反应属性存储为一个字符串。
那么,pysb中的规则需要指定为:
# Rule(name, reaction, constant)
Rule('L_binds_R', L(unbound) + R(inactive) >> L(bound)%R(active), kf)
我的问题在于 yaml 中的“反应”字段作为字符串存储在 python 对象中,但 pysb 不接受纯文本以外的任何其他格式。
我已经在 PySB 中检查过,反应字段在任何情况下都不能是字符串,并且我没有找到如何在 YAML 中转义变量的格式。
有解决问题的办法吗?
【问题讨论】:
-
您要么必须解析
reaction字符串并在 Python 中重新构建该表达式,要么使用eval()并引入运行任意 Python 代码的能力(如果您的应用程序接受,这是一个巨大的安全漏洞来自不受信任来源的输入)。 -
什么是“反应”字段? YAML 中既没有字段,Python 中也没有字段。什么是 PyYAML 对象?或者你的意思是你正在使用 PyYAML 创建一个 Python 对象。
-
PySB 使用运算符重载来“使”Python 本身解析直接用 Python 代码编写的规则表达式,因此如果不使用
eval,就没有完全通用的方法来做你想做的事。如果您可以进一步扩展您的总体目标,我们或许可以提出一些替代方法。
标签: python python-2.7 yaml pysb