Почему я не могу использовать eval (whole_string) сразу, почему мне нужно использовать parser.expr (whole_string) .compile ()? - PullRequest
0 голосов
/ 03 марта 2020

Исходный код для построения калькулятора с использованием Tkinter

parser.expr(entire_string).compile() VS eval(entire_string) Версия1:

import parser
entire_string = '1+2'
a = parser.expr(entire_string).compile()
result = eval(a)

Версия2:

entire_string = '1+2'
result = eval(entire_string)

Какой смысл использовать parser.expr(entire_string).compile(), почему бы не использовать eval(entire_string) сразу?

1 Ответ

2 голосов
/ 03 марта 2020

Это потому, что eval в python опасен. Если строка введена пользователем, он может выполнить произвольный код на вашем компьютере. Это особенно опасно, если он работает на удаленном сервере.

Анализатор будет анализировать только выражение и возвращать значение, не позволяя произвольному python коду выполняться.

...