Использование python eval () против ast.literal_eval ()?

У меня есть ситуация с некоторым кодом, гдеeval() придумал как возможное решение. Теперь мне никогда не приходилось пользоватьсяeval() прежде, но я столкнулся с большим количеством информации о потенциальной опасности, которую это может вызвать. Тем не менее, яЯ очень осторожен с его использованием.

Моя ситуация такова, что у меня есть ввод данных от пользователя:

datamap = raw_input('Provide some data here: ')

кудаdatamap должен быть словарь. Я искал вокруг и обнаружил, чтоeval() мог бы решить это. Я подумал, что смогу проверить тип ввода, прежде чем пытаться использовать данные, и это будет действенной мерой безопасности.

datamap = eval(raw_input('Provide some data here: ')
if not isinstance(datamap, dict):
    return

Я прочитал документы, и мне все еще неясно, будет ли это безопасно или нет. Оценивает ли eval данные сразу после их ввода или послеdatamap переменная называется?

Этоast модуля.literal_eval() единственный безопасный вариант?

Ответы на вопрос(6)

Ваш ответ на вопрос