Мне нужен простой способ сделать «API-интерфейс калькулятора» на Python.
Прямо сейчас меня не особо заботит точный набор функций, которые будет поддерживать калькулятор.
Я хочу, чтобы он получил строку, скажем "1+1"
, и вернул строку с результатом, в нашем случае "2"
.
Есть ли способ сделать eval
безопасным для таких вещей?
Для начала я бы сделал
env = {}
env["locals"] = None
env["globals"] = None
env["__name__"] = None
env["__file__"] = None
env["__builtins__"] = None
eval(users_str, env)
так что вызывающий не может связываться с моими локальными переменными (или видеть их).
Но я уверен, что много здесь наблюдаю.
Устранимы ли проблемы безопасности eval
или слишком много мелких деталей, чтобы все работало правильно?