当前位置: 首页 > 面试题库 >

使用python的eval()与ast.literal_eval()?

邵修诚
2023-03-14
问题内容

我遇到了一些代码,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()唯一安全的选择吗?


问题答案:

169

datamap = eval(raw_input('Provide some data here: '))表示你实际上在认为代码不安全之前对其进行了评估。调用该函数后,它将立即评估代码。另请参阅的危险eval。

ast.literal_eval 如果输入不是有效的Python数据类型,则会引发异常,因此如果输入无效,则不会执行代码。

使用ast.literal_eval时,你需要eval。通常,你不应该评估文字Python语句。



 类似资料:
  • 我遇到过这样一种情况:一些代码中出现了作为可能的解决方案。现在,我以前从未使用过,但是,我遇到了大量关于它可能导致的潜在危险的信息。也就是说,我对使用它非常谨慎。 我的情况是,我有输入是由用户: 其中,需要是一个字典。我四处搜索,发现可以解决这个问题。我认为在尝试使用数据之前,我可能能够检查输入的类型,这将是一个可行的安全预防措施。 我通读了文档,我仍然不清楚这是否安全。在输入数据时或调用变量后,

  • 问题内容: 我在玩耍时偶然发现了Python中的一个函数。我想不出需要此功能的情况,除了可能是语法糖。谁能举一个例子? 问题答案: 并且是一种方便快捷的方法,可以动态地获取一些源代码,也许要稍加修改然后再执行- 但是,它们从来不是最好的方法,尤其是在生产代码中,而不是“快速而又简单”脏”的原型&c。 例如,如果我不得不处理这样的动态Python源代码,那么我会使用ast模块-比得多(比它更安全(您

  • 本文向大家介绍Python中的exec、eval使用实例,包括了Python中的exec、eval使用实例的使用技巧和注意事项,需要的朋友参考一下 通过exec可以执行动态Python代码,类似Javascript的eval功能;而Python中的eval函数可以计算Python表达式,并返回结果(exec不返回结果,print(eval("…"))打印None); 这里有个scope(命名空间,

  • 本文向大家介绍Python eval(),包括了Python eval()的使用技巧和注意事项,需要的朋友参考一下 该方法解析传递给此方法的表达式,并在程序中运行该表达式。换句话说,它将字符串解释为python程序中的代码。 语法 eval的语法如下- 哪里 表达式-这是传递给方法的python表达式。 globals-可用的全局方法和变量的字典。 locals-可用的本地方法和变量的字典。 在下

  • 本文向大家介绍python中eval与int的区别浅析,包括了python中eval与int的区别浅析的使用技巧和注意事项,需要的朋友参考一下 python中eval和int的区别是什么?下面给大家介绍一下: 1.eval()函数 eval(<字符串>)能够以Python表达式的方式解析并执行字符串,并将返回结果输出。eval()函数将去掉字符串的两个引号,将其解释为一个变量。 作用: a. 处理