Python中的安全表达式解析器

14 投票
5 回答
15926 浏览
提问于 2025-04-16 03:22

我该如何让用户安全地执行数学表达式呢?

我需要写一个完整的解析器吗?

有没有类似于 ast.literal_eval() 的东西,但可以用来处理表达式的?

5 个回答

1

几周前,我做了类似的事情,不过是针对逻辑表达式(比如或、与、非、比较、括号等等)。我使用了Ply这个解析器来完成这个任务。我创建了一个简单的词法分析器和解析器。解析器生成了一个抽象语法树(AST),这个树后来用来进行计算。这样做的好处是你可以完全控制用户输入的内容,因为只有符合语法规则的表达式才会被解析。

3

你想要什么样的表达式呢?是变量赋值吗?还是函数计算?

SymPy 的目标是成为一个功能齐全的Python计算机代数系统。

12

Pyparsing提供的示例中包含了几个表达式解析器:

如果你想要一个更现成的解决方案,可以看看plusminus,这是一个基于pyparsing的可扩展算术解析包。

撰写回答