1

我正在使用 kivy 为 android 制作一个计算器,它几乎完成了(不能使用 java,因为 python 是我知道的唯一语言)。它的工作方式是,用户输入一个表达式,然后 eval 用于评估该表达式。目前,在我的应用程序中,eval 表达式可以包含数字、数学运算符(+、-、/、*)和数学模块中的大多数运算符(简而言之,它是一个科学计算器),并且可以按预期工作。将来我计划集成 matplotlib 以向应用程序添加图形功能。因此,在上下文中, eval 是一个安全的选择。鉴于我在编程方面的经验有限,我并不认为 eval 在很多情况下都是不安全的方法,就在几天前,我偶然发现了一个讨论与使用 eval 相关的安全问题的线程。

那么将评估更改为我的应用程序中的其他内容更好还是在给定情况下安全?如果对前者是,那么最好的选择是什么而不改变我的代码太多。如果它在python标准库中也会更好,这样我就不会增加应用程序的大小)

编辑:顺便说一句,eval 表达式是实时计算的(不确定这是否重要)。

4

1 回答 1

1

这篇文章应该对你很有用——它几乎正是你想要做的。

另一方面,这是一个很好的警告,如果您不小心可能会发生什么大概有解决这个问题的好方法(也许只是过滤掉任何包含双下划线的输入,作为一个非常简单的开始),但值得记住的是 Python 有很多魔法,并且大部分所说的魔法都可以通过eval().

于 2013-01-25T04:50:20.063 回答