我想要一种简单的方法在Python中执行"计算器API".
现在,我并不关心计算器将支持的确切功能集.
我希望它接收一个字符串,"1+1"并在我们的例子中返回一个包含结果的字符串"2".
有没有办法让eval这种东西安全?
首先,我会这样做
env = {}
env["locals"] = None
env["globals"] = None
env["__name__"] = None
env["__file__"] = None
env["__builtins__"] = None
eval(users_str, env)
Run Code Online (Sandbox Code Playgroud)
这样调用者就不会搞乱我的局部变量(或看到它们).
但我相信我在这里监督很多.
eval安全问题是否可以解决,或者是否存在太多微小的细节以使其正常工作?
所以我在Python 3中有一个简单的程序,它只是一个基本的计算器.这是一段代码:
calculation = input("What calculation do you want to do?\n")
if "+" in calculation:
numbers = calculation.split("+")
answer = int(numbers[0]) + int(numbers[1])
Run Code Online (Sandbox Code Playgroud)
我下面还有其他一些操作设置.问题是如果有人要输入任何东西以及操作(例如10 ++ 2或10 + abc2),代码会抛出错误,因为它显然无法向abc2添加10.
我认为我可以通过测试每个角色来解决问题,但肯定这是一个很长的路要走.有没有办法用Python解决问题?