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网络编程学习笔记(七):HTML和XHTML解析(HTMLParser、BeautifulSoup)
Jun 09 Python
Python模拟登录12306的方法
Dec 30 Python
Python使用中文正则表达式匹配指定中文字符串的方法示例
Jan 20 Python
Python Pandas找到缺失值的位置方法
Apr 12 Python
python中for用来遍历range函数的方法
Jun 08 Python
[原创]Python入门教程4. 元组基本操作
Oct 31 Python
python爬取cnvd漏洞库信息的实例
Feb 14 Python
python opencv minAreaRect 生成最小外接矩形的方法
Jul 01 Python
解决django服务器重启端口被占用的问题
Jul 26 Python
python装饰器三种装饰模式的简单分析
Sep 04 Python
python利用线程实现多任务
Sep 18 Python
完美解决torch.cuda.is_available()一直返回False的玄学方法
Feb 06 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利用iframe实现无刷新文件上传功能的代码
2011/09/29 PHP
解析php扩展php_curl.dll不加载的解决方法
2013/06/26 PHP
PHP资源管理框架Assetic简介
2014/06/12 PHP
PHP入门教程之日期与时间操作技巧总结(格式化,验证,获取,转换,计算等)
2016/09/11 PHP
PhpSpreadsheet设置单元格常用操作汇总
2020/11/13 PHP
一个不错的用JavaScript实现的UBB编码函数
2007/03/09 Javascript
javascript setTimeout()传递函数参数(包括传递对象参数)
2010/04/07 Javascript
javascript+mapbar实现地图定位
2010/04/09 Javascript
jquery offset函数应用实例
2012/11/14 Javascript
jQuery bxCarousel实现图片滚动切换效果示例代码
2013/05/15 Javascript
JS保存和删除cookie操作 判断cookie是否存在
2013/11/13 Javascript
js仿百度贴吧验证码特效实例代码
2014/01/16 Javascript
深入理解JQuery中的事件与动画
2016/05/18 Javascript
Angular之toDoList的实现代码示例
2017/12/02 Javascript
JavaScript设计模式之单例模式简单实例教程
2018/07/02 Javascript
实例介绍JavaScript中多种组合继承
2019/01/20 Javascript
OpenLayer学习之自定义测量控件
2020/09/28 Javascript
VUE项目实现主题切换的多种方法
2020/11/26 Vue.js
[01:03:36]Ti4 循环赛第三日DK vs Titan
2014/07/12 DOTA
[39:00]Optic vs VP 2018国际邀请赛淘汰赛BO3 第三场 8.24
2018/08/25 DOTA
Python中的descriptor描述器简明使用指南
2016/06/02 Python
Python socket实现简单聊天室
2018/04/01 Python
Python标准库shutil用法实例详解
2018/08/13 Python
python继承threading.Thread实现有返回值的子类实例
2020/05/02 Python
h5页面背景图很长要有滚动条滑动效果的实现
2021/01/27 HTML / CSS
太阳镜仓库,售价20美元或更少:Sunglass Warehouse
2016/09/28 全球购物
斯凯奇澳大利亚官网:SKECHERS澳大利亚
2018/03/31 全球购物
戛纳奢侈品商店:Jacques Loup法国
2019/11/04 全球购物
医学生自我鉴定范文
2013/11/08 职场文书
区域总监的岗位职责
2013/11/21 职场文书
公司营业员的自我评价
2014/03/04 职场文书
工业设计毕业生自荐信
2014/04/13 职场文书
党支部党的群众路线对照检查材料
2014/09/24 职场文书
校运会广播稿
2015/08/19 职场文书
中学生打架检讨书之500字
2019/08/06 职场文书
教你用Java在个人电脑上实现微信扫码支付
2021/06/13 Java/Android