如何在Python中正确进行评估?

时间:2019-05-12 01:57:46

标签: python eval eof

我正在尝试评估Flask项目中的字符串,但我不断收到此错误。

File "<string>", line 0

    ^
SyntaxError: unexpected EOF while parsing

这是我正在使用的代码

def f(x):
   input = "math.log((math.sin(x)**2) + 1) - (1 / 2)"
   string = input.replace("x",str(x))
   result = eval(string)
   return result

2 个答案:

答案 0 :(得分:1)

因为replace是字符串类的方法,所以必须从字符串本身调用它。

def f(x):
   input = "math.log((math.sin(x)**2) + 1) - (1 / 2)"
   string = input.replace("x",str(x))
   result = eval(string)
   return result

但是,除非绝对必要,否则应避免调用eval;评估是邪恶的。 Eval(及其堂兄exec)可以打开您的程序以进行任意代码注入。

您能多解释一下您的用例,我是否可以提出更好的替代方案?

为什么不起作用:

def f(x):
    return math.log((math.sin(x)**2) + 1) - (1 / 2)

答案 1 :(得分:-1)

尝试更改

result = eval(string)
return result

return eval(string)