Как я могу сделать eval правильно в Python? - PullRequest
0 голосов
/ 12 мая 2019

Я пытаюсь оценить строку в проекте 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 ]

1 голос
/ 12 мая 2019

Поскольку replace - это метод класса string, он должен вызываться из самой строки.

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)
0 голосов
/ 12 мая 2019

Попробуйте изменить

result = eval(string)
return result

на

return eval(string)
...