我遇到一些代码的情况eval()
提出了一个可能的解决方案。现在我从来没有使用过eval()
但在此之前,我已经了解到很多有关它可能造成的潜在危险的信息。也就是说,我对使用它非常谨慎。
我的情况是我有用户提供的输入:
datamap = input('Provide some data here: ')
Where datamap
需要是一本字典。我四处搜寻发现eval()
可以解决这个问题。我认为我可以在尝试使用数据之前检查输入的类型,这将是一种可行的安全预防措施。
datamap = eval(input('Provide some data here: ')
if not isinstance(datamap, dict):
return
我通读了文档,但我仍然不清楚这是否安全。 eval 是在输入数据后立即评估数据还是在数据输入后评估数据datamap
变量被称为?
Is the ast
模块的.literal_eval()
唯一安全的选择?
datamap = eval(input('Provide some data here: '))
意味着您实际评估代码before你认为它是否不安全。一旦函数被调用,它就会评估代码。也可以看看的危险eval http://nedbatchelder.com/blog/201206/eval_really_is_dangerous.html.
ast.literal_eval https://docs.python.org/3/library/ast.html#ast.literal_eval如果输入不是有效的 Python 数据类型,则会引发异常,因此如果不是有效的代码将不会执行。
Use ast.literal_eval
每当你需要的时候eval https://docs.python.org/3/library/functions.html#eval。您通常不应该评估字面的 Python 语句。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)