Использование 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()
единственный безопасный вариант?