我如何评估以下内容:
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。
答案 0 :(得分:3)
如果这是一个简单的控制台脚本,其中安全性无关紧要,您可以使用exec()
来执行数学语句。但是,python不支持a=(c=4)*2
之类的代码,因此不可能本机化。
然而,exec()
是一个巨大的安全漏洞,如果它正在运行,例如,一个Web服务器。如果预计会出现不受信任且潜在恶意的用户可以提交命令的情况,您应该考虑对其进行清理并自行解析,或者implementing sandboxing.
TL; DR 由于您正在处理不受支持的自定义命令,因此您应编写自己的解析器来处理和执行这些命令,而不必担心执行不受信任的代码。
答案 1 :(得分:1)
可能最好的方法是为这个特定的语法编写一个解析器(最糟糕的是涉及eval / exec的东西 - 向这些函数提交用户提供的内容是蠕虫的安全措施)。
看一下这个例子: