当前位置: 首页 > 编程笔记 >

Python中函数eval和ast.literal_eval的区别详解

邹缪文
2023-03-14
本文向大家介绍Python中函数eval和ast.literal_eval的区别详解,包括了Python中函数eval和ast.literal_eval的区别详解的使用技巧和注意事项,需要的朋友参考一下

前言

众所周知在Python中,如果要将字符串型的list,tuple,dict转变成原有的类型呢? 这个时候你自然会想到eval. eval函数在python中做数据类型的转换还是很有用的。它的作用就是把数据还原成它本身或者是能够转化成的数据类型.下面来看看示例代码:

string <==> list

string <==> tuple

string <==> dict

也就是说,使用eval可以实现从元祖,列表,字典型的字符串到元祖,列表,字典的转换,此外,eval还可以对字符
串型的输入直接计算。比如,她会将'1+1'的计算串直接计算出结果。

从上面来看,eval功能可谓非常强大,即可以做string与list,tuple,dict之间的类型转换,还可以做计算器使用!更有甚者,可以对她能解析的字符串都做处理,而不顾忌可能带来的后果!所以说eval强大的背后,是巨大的安全隐患!!! 比如说,用户恶意输入下面的字符串

open(r'D://filename.txt', 'r').read()

__import__('os').system('dir')

__import__('os').system('rm -rf /etc/*')

那么eval就会不管三七二十一,显示你电脑目录结构,读取文件,删除文件.....如果是格盘等更严重的操作,她也会照做不误!!!

所以这里就引出了另外一个安全处理方式ast.literal_eval.可以先看下stackoverflow及Python官方关于这个解释!

stackoverflow

Python官方文档

简单点说ast模块就是帮助Python应用来处理抽象的语法解析的。而该模块下的literal_eval()函数:则会判断需要计算的内容计算后是不是合法的python类型,如果是则进行运算,否则就不进行运算。

比如说上面的计算操作,及危险操作,如果换成了ast.literal_eval() ,都会拒绝执行。

报值错误,不合法的字符串!

而只会执行合法的Python类型,从而大大降低系统的危险性!

所以出于安全考虑,对字符串进行类型转换的时候,最好使用ast.literal_eval()函数!

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对小牛知识库的支持。

 类似资料:
  • 问题内容: 我遇到了一些代码,将其作为可能的解决方案。现在,我从来没有使用过,但是,我遇到了很多有关它可能引起的潜在危险的信息。也就是说,我对使用它非常谨慎。 我的情况是我有一个用户输入: 哪里需要一本字典。我四处搜寻,发现可以解决这个问题。我认为我可以在尝试使用数据之前检查输入的类型,这将是可行的安全预防措施。 我通读了文档,但仍不清楚这是否安全。是否在输入数据后或调用变量后立即评估数据? 该a

  • 本文向大家介绍详解python中eval函数的作用,包括了详解python中eval函数的作用的使用技巧和注意事项,需要的朋友参考一下 eval() 函数用来执行一个字符串表达式,并返回表达式的值。 eval函数功能:将字符串str当成有效的表达式来求值并返回计算结果。eval函数可以实现list、dict、tuple与str之间的转化 eval() 方法的语法: 参数: expression -

  • 问题内容: 我将2 MB的数据作为字符串转换为字典。输入已以JSON序列化。 无论如何,我当前正在使用ast.literal_eval,并且得到了我想要的字典,但是当我尝试仅运行eval时,它似乎运行得更快,并且还返回了相同的结果。 当eval正常工作时,是否有任何理由使用ast模块或json模块? 问题答案: 我真的不喜欢这种对stackoverflow(以及其他地方)的态度,告诉没有任何上下文

  • 本文向大家介绍详解python eval函数的妙用,包括了详解python eval函数的妙用的使用技巧和注意事项,需要的朋友参考一下 python eval函数功能:将字符串str当成有效的表达式来求值并返回计算结果。 函数定义: 将字符串str当成有效的表达式来求值并返回计算结果。globals和locals参数是可选的,如果提供了globals参数,那么它必须是dictionary类型;如果

  • 主要内容:eval()和exec()的用法,exec()和eval()的区别,eval() 和 exec() 函数的应用场景eval() 和 exec() 函数都属于 Python 的内置函数,由于这两个函数在功能和用法方面都有相似之处,所以将它们放到一节进行介绍。 eval() 和 exec() 函数的功能是相似的,都可以执行一个字符串形式的 Python 代码(代码以字符串的形式提供),相当于一个 Python 的解释器。二者不同之处在于,eval() 执行完要返回结果,而 exec() 执

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