因为python支持一些代数形式,你可以这样做:
eval("1 + 1")
Run Code Online (Sandbox Code Playgroud)
但这允许输入执行env中定义的任何内容:
eval("__import__('sys').exit(1)")
Run Code Online (Sandbox Code Playgroud)
另外,如果你想支持python不支持的东西,那么这个方法会失败:
x³ + y² + c
----------- = 0
z
Run Code Online (Sandbox Code Playgroud)
您可以使用ply实现tokenizer和parser,而不是这样做.评估像'1 + 1'这样的东西不应该超过十行左右.
您也可以手动实现tokenizer和解析器.阅读有关LL和LR解析器的信息.在尝试之前,最好先学习使用解析器生成器.