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使用7z解压软件备份文件脚本分享
Feb 21 Python
python中的多重继承实例讲解
Sep 28 Python
深入理解Python中各种方法的运作原理
Jun 15 Python
django model去掉unique_together报错的解决方案
Oct 18 Python
浅谈numpy中linspace的用法 (等差数列创建函数)
Jun 07 Python
启动targetcli时遇到错误解决办法
Oct 26 Python
Python中支持向量机SVM的使用方法详解
Dec 26 Python
在django模板中实现超链接配置
Aug 21 Python
python基于K-means聚类算法的图像分割
Oct 30 Python
Python+OpenCV+图片旋转并用原底色填充新四角的例子
Dec 12 Python
OpenCV Python实现图像指定区域裁剪
Mar 12 Python
python和C++共享内存传输图像的示例
Oct 27 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
thinkphp框架实现删除和批量删除
2016/06/29 PHP
laravel中数据显示方法(默认值和下拉option默认选中)
2019/10/11 PHP
jQuery实现仿Google首页拖动效果的方法
2015/05/04 Javascript
Node.js实现兼容IE789的文件上传进度条
2016/09/02 Javascript
RequireJs的使用详解
2017/02/19 Javascript
Nodejs基于LRU算法实现的缓存处理操作示例
2017/03/17 NodeJs
原生js获取left值和top值的三种方法
2017/08/02 Javascript
Vue.js仿微信聊天窗口展示组件功能
2017/08/11 Javascript
基于ajax和jsonp的原生封装(实例)
2017/10/16 Javascript
基于Vue的ajax公共方法(详解)
2018/01/20 Javascript
node结合swig渲染摸板的方法
2018/04/11 Javascript
基于vue实现一个禅道主页拖拽效果
2019/05/27 Javascript
微信小程序里引入SVG矢量图标的方法
2019/09/20 Javascript
vue实现在线翻译功能
2019/09/27 Javascript
详解用js代码触发dom事件的实现方案
2020/06/10 Javascript
解决vue页面渲染但dom没渲染的操作
2020/07/27 Javascript
vue实现打地鼠小游戏
2020/08/21 Javascript
[01:14]英雄,所敬略同——2018完美盛典宣传视频4K
2018/12/05 DOTA
Numpy之将矩阵拉成向量的实例
2019/11/30 Python
python numpy 矩阵堆叠实例
2020/01/17 Python
详解python内置常用高阶函数(列出了5个常用的)
2020/02/21 Python
python实现PDF中表格转化为Excel的方法
2020/06/16 Python
捷克领先的户外服装及配件市场零售商:ALPINE PRO
2018/01/09 全球购物
俄罗斯名牌服装网上商店:UNIQUE FABRIC
2019/07/25 全球购物
日本最大的彩色隐形眼镜销售网站:CharmColor
2020/09/09 全球购物
教师档案管理制度
2014/01/23 职场文书
租车协议书范本
2014/04/22 职场文书
雨花台导游词
2015/02/06 职场文书
经理岗位职责范本
2015/04/15 职场文书
2015年数学教研组工作总结
2015/05/23 职场文书
科技馆观后感
2015/06/08 职场文书
创业计划书之面包店
2019/09/17 职场文书
Python Flask请求扩展与中间件相关知识总结
2021/06/11 Python
python机器学习Github已达8.9Kstars模型解释器LIME
2021/11/23 Python
十大最强水系宝可梦,最美宝可梦排第三,榜首大家最熟悉
2022/03/18 日漫
【海涛DOTA】D-cup邀请赛NV.cn vs DT.Love
2022/04/01 DOTA