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


Posted in Python onAugust 10, 2017

前言

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

string <==> list

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

string <==> tuple

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

string <==> dict

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

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

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

从上面来看,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中函数eval和ast.literal_eval的区别详解

Python官方文档

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

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

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

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

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

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

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

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

总结

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

Python 相关文章推荐
python调用windows api锁定计算机示例
Apr 17 Python
Python文件夹与文件的操作实现代码
Jul 13 Python
python使用cPickle模块序列化实例
Sep 25 Python
Python键盘输入转换为列表的实例
Jun 23 Python
matplotlib给子图添加图例的方法
Aug 03 Python
基于python分析你的上网行为 看看你平时上网都在干嘛
Aug 13 Python
Python常用模块os.path之文件及路径操作方法
Dec 03 Python
TensorFlow2.0矩阵与向量的加减乘实例
Feb 07 Python
python生成任意频率正弦波方式
Feb 25 Python
Python csv文件记录流程代码解析
Jul 16 Python
python中sys模块的介绍与实例
Apr 17 Python
python机器学习Github已达8.9Kstars模型解释器LIME
Nov 23 Python
Python基础之getpass模块详细介绍
Aug 10 #Python
Python中字典(dict)合并的四种方法总结
Aug 10 #Python
详解Python 模拟实现生产者消费者模式的实例
Aug 10 #Python
Python 操作文件的基本方法总结
Aug 10 #Python
Python 模拟登陆的两种实现方法
Aug 10 #Python
Python 网页解析HTMLParse的实例详解
Aug 10 #Python
关于Python中浮点数精度处理的技巧总结
Aug 10 #Python
You might like
php跨服务器访问方法小结
2015/05/12 PHP
php常量详细解析
2015/10/27 PHP
用javascript获取当页面上鼠标光标位置和触发事件的对象的代码
2009/12/09 Javascript
热点新闻滚动特效的js代码
2013/08/17 Javascript
js统计录入文本框中字符的个数并加以限制不超过多少
2014/05/23 Javascript
JavaScript编程学习技巧汇总
2016/02/21 Javascript
通过JS和PHP两种方法判断用户请求时使用的浏览器类型
2016/09/01 Javascript
微信小程序 loading(加载中提示框)实例
2016/10/28 Javascript
JavaScript使用Ajax上传文件的示例代码
2017/08/10 Javascript
jQuery+vue.js实现的九宫格拼图游戏完整实例【附源码下载】
2017/09/12 jQuery
ES6 javascript中class静态方法、属性与实例属性用法示例
2017/10/30 Javascript
vue全局组件与局部组件使用方法详解
2018/03/29 Javascript
vuex实现的简单购物车功能示例
2019/02/13 Javascript
layui: layer.open加载窗体时出现遮罩层的解决方法
2019/09/26 Javascript
Vue组件通信入门之Provide和Inject机制
2019/12/29 Javascript
js实现浏览器打印功能的示例代码
2020/07/15 Javascript
Python通过解析网页实现看报程序的方法
2014/08/04 Python
讲解Python中的递归函数
2015/04/27 Python
浅谈python中的__init__、__new__和__call__方法
2017/07/18 Python
Python全栈之列表数据类型详解
2019/10/01 Python
Python tensorflow实现mnist手写数字识别示例【非卷积与卷积实现】
2019/12/19 Python
Python实现分数序列求和
2020/02/25 Python
美国一家专业的太阳镜网上零售商:Solstice太阳镜
2016/07/25 全球购物
Notino瑞典:购买香水和美容产品
2019/07/26 全球购物
英国折扣高尔夫商店:Discount Golf Store
2019/11/19 全球购物
Ibatis的核心配置文件都有什么
2014/09/08 面试题
JSF如何进行表格处理及取值
2012/08/06 面试题
给物业的表扬信
2014/01/21 职场文书
你的创业计划书怎样才能打动风投
2014/02/06 职场文书
遗嘱继承公证书
2014/04/09 职场文书
租赁协议书范本
2014/04/22 职场文书
跑操口号
2014/06/12 职场文书
志愿者宣传口号
2014/06/17 职场文书
离婚协议书标准格式
2014/10/04 职场文书
2014年医德医风工作总结
2014/11/13 职场文书
Nginx配置并兼容HTTP实现代码解析
2021/03/31 Servers