我有一些代码的情况,其中eval()
是一个可能的解决方案。现在我从来没有使用eval()
之前,但是,我遇到了大量的信息,关于它可能导致的潜在危险。也就是说,我对使用它非常谨慎。
我的情况是,我有输入是由一个用户:
datamap = input('Provide some data here: ')
其中datamap
需要是一个字典。我四处搜索,发现eval()
可以解决这个问题。我认为我可以在尝试使用数据之前检查输入的类型,这将是一个可行的安全预防措施。
datamap = eval(input('Provide some data here: ')
if not isinstance(datamap, dict):
return
我通读了所有的文件,但我仍然不清楚这样做是否安全。eval是否在数据输入时立即求值,还是在datamap
变量被调用之后求值?
ast
模块的.literal_eval()
是唯一安全的选项吗?