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检查字符串是否是正确ISBN的方法
Jul 11 Python
Python生成数字图片代码分享
Oct 31 Python
Python抓取聚划算商品分析页面获取商品信息并以XML格式保存到本地
Feb 23 Python
Python装饰器原理与简单用法实例分析
Apr 29 Python
Pandas统计重复的列里面的值方法
Jan 30 Python
django-crontab 定时执行任务方法的实现
Sep 06 Python
大家都说好用的Python命令行库click的使用
Nov 07 Python
PyCharm取消波浪线、下划线和中划线的实现
Mar 03 Python
Tensorflow中的dropout的使用方法
Mar 13 Python
Jupyter Notebook远程登录及密码设置操作
Apr 10 Python
全网首秀之Pycharm十大实用技巧(推荐)
Apr 27 Python
Python如何用re模块实现简易tokenizer
May 02 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利用COM对象访问SQLServer、Access
2006/10/09 PHP
ThinkPHP CURD方法之data方法详解
2014/06/18 PHP
php面向对象编程self和static的区别
2016/05/08 PHP
php中遍历二维数组并以表格的形式输出的方法
2017/01/03 PHP
yii2多图上传组件的使用教程
2018/05/10 PHP
永不消失的title提示代码
2007/02/15 Javascript
利用window.name实现windowStorage代码分享
2014/01/02 Javascript
js导航栏单击事件背景变换示例代码
2014/01/13 Javascript
jquery checkbox 勾选的bug问题解决方案与分析
2014/11/13 Javascript
AngularJS入门心得之directive和controller通信过程
2016/01/25 Javascript
js实现楼层效果的简单实例
2016/07/15 Javascript
微信小程序 图片等比例缩放(图片自适应屏幕)
2016/11/16 Javascript
JavaScript基础之AJAX简单的小demo
2017/01/29 Javascript
js判断用户是输入的地址请求的路径(实例讲解)
2017/07/18 Javascript
vue使用axios时关于this的指向问题详解
2017/12/22 Javascript
使用koa-log4管理nodeJs日志笔记的使用方法
2018/11/30 NodeJs
js实现固定区域内的不重叠随机圆
2019/10/24 Javascript
es6数组的flat(),flatMap()函数用法实例分析
2020/04/18 Javascript
Vue为什么要谨慎使用$attrs与$listeners
2020/08/27 Javascript
使用python实现递归版汉诺塔示例(汉诺塔递归算法)
2014/04/08 Python
python实现监控windows服务并自动启动服务示例
2014/04/17 Python
python网络编程学习笔记(九):数据库客户端 DB-API
2014/06/09 Python
Python中使用HTMLParser解析html实例
2015/02/08 Python
在Linux系统上通过uWSGI配置Nginx+Python环境的教程
2015/12/25 Python
Python绘制频率分布直方图的示例
2019/07/08 Python
Python中remove漏删和索引越界问题的解决
2020/03/18 Python
如何理解python对象
2020/06/21 Python
HTML5中判断横屏竖屏的方法(移动端)
2016/08/04 HTML / CSS
英国领先的在线高尔夫商店:Gamola Golf
2019/11/16 全球购物
工程师求职简历的自我评价分享
2013/10/10 职场文书
公务员职业生涯规划书范文  
2014/01/19 职场文书
大学生社团活动总结
2014/04/26 职场文书
公司开业庆典策划方案
2014/06/04 职场文书
2015年党员自评材料
2014/12/17 职场文书
《刺客之王:C罗全景传记》:时代从来不会亏待手艺人
2019/11/28 职场文书
Python+Appium自动化测试的实战
2021/06/30 Python