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 re模块介绍
Nov 30 Python
分析Python编程时利用wxPython来支持多线程的方法
Apr 07 Python
Python中的localtime()方法使用详解
May 22 Python
Python检测生僻字的实现方法
Oct 23 Python
Python打印输出数组中全部元素
Mar 13 Python
Python序列循环移位的3种方法推荐
Apr 09 Python
Linux 修改Python命令的方法示例
Dec 03 Python
python实现淘宝秒杀脚本
Jun 23 Python
机器学习实战之knn算法pandas
Jun 22 Python
Python 类方法和实例方法(@classmethod),静态方法(@staticmethod)原理与用法分析
Sep 20 Python
Django如何实现密码错误报错提醒
Sep 04 Python
Python序列化模块JSON与Pickle
Jun 05 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中用于检测一个地理IP地址是否可用的代码
2012/02/19 PHP
php使用pack处理二进制文件的方法
2014/07/03 PHP
详解PHP防止直接访问.php 文件的实现方法
2017/07/28 PHP
PHP array_shift()用法实例分析
2019/01/07 PHP
Jquery中获取iframe的代码
2011/01/11 Javascript
分享一个asp.net pager分页控件
2012/01/04 Javascript
jQuery实现类似淘宝购物车全选状态示例
2013/06/26 Javascript
js实现倒计时(距离结束还有)示例代码
2013/07/24 Javascript
Jquery ajax 同步阻塞引起的UI线程阻塞问题
2015/11/17 Javascript
使用jQuery mobile库检测url绝对地址和相对地址的方法
2015/12/04 Javascript
Javascript技术栈中的四种依赖注入小结
2016/02/27 Javascript
详解angularJs指令的3种绑定策略
2017/04/13 Javascript
详解webpack分离css单独打包
2017/06/21 Javascript
JS实现登录页密码的显示和隐藏功能
2017/12/06 Javascript
vue单页缓存存在的问题及解决方案(小结)
2018/09/25 Javascript
详解vue中router-link标签所必备了解的属性
2019/04/15 Javascript
Javascript 类型转换、封闭函数及常见内置对象操作示例
2019/11/15 Javascript
用Golang运行JavaScript的实现示例
2019/11/25 Javascript
vue中的使用token的方法示例
2020/03/10 Javascript
[02:07]TI9显影之尘系列 - Vici Gaming
2019/08/20 DOTA
[01:00:30]完美世界DOTA2联赛循环赛 Inki vs Matador BO2第二场 10.31
2020/11/02 DOTA
Python获取DLL和EXE文件版本号的方法
2015/03/10 Python
Python中random模块生成随机数详解
2016/03/10 Python
Python3 max()函数基础用法
2019/02/19 Python
为什么python比较流行
2020/06/19 Python
中国专业的综合网上购物商城:京东
2016/08/02 全球购物
Melijoe英国官网:法国儿童时尚网站
2016/11/18 全球购物
英国图书音像网站:Hive.co.uk(图书、电子书、DVD、蓝光、音乐CD等)
2017/10/16 全球购物
机关办公室岗位职责
2014/04/16 职场文书
实习指导老师评语
2014/04/26 职场文书
莫言诺贝尔获奖演讲稿
2014/05/21 职场文书
应届大专生自荐书
2014/06/16 职场文书
2014党员干部四风问题对照检查材料思想汇报
2014/09/24 职场文书
《攀登者》:“海拔8000米以上,你不能指望任何人”
2019/11/25 职场文书
PostgreSQL怎么创建分区表详解
2022/06/25 PostgreSQL