0

我如何评估以下内容:

a=b=c=d=e=0  # initially

如果用户输入:

"a=b=4" as a string, it should modify the existing value.

因此,如果用户输入,结果将类似于 a=4, b=4:

"a=(c=4)*2", it should evaluate as expression and update the values.

所以结果将类似于 a=8, c=4

括号可以进一步嵌套。

任何帮助将非常感激。我正在使用python。

4

2 回答 2

3

如果这是一个绝对不关心安全性的简单控制台脚本,您可以使用它exec()来执行数学语句。但是,python 不支持诸如 之类的代码a=(c=4)*2,因此无法原生实现。

但是exec()如果它在 Web 服务器上运行,则会出现一个巨大的安全漏洞。如果预计这是不受信任和潜在恶意用户可以提交命令的地方,您应该考虑对其进行清理和自己解析,或者实施沙盒。

TL;DR由于您正在处理不受支持的自定义命令,因此您应该编写自己的解析器来处理和执行这些命令,而不必担心执行不受信任的代码。

于 2013-04-03T19:47:40.110 回答
1

可能最好的方法是为这个特定的语法编写一个解析器(最糟糕的是涉及 eval/exec 的东西 - 将用户提供的内容提交给这些函数是蠕虫的安全罐)。

看看这个例子:

于 2013-04-03T19:49:09.443 回答