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中的tuple元组详细介绍
Feb 02 Python
实例讲解Python的函数闭包使用中应注意的问题
Jun 20 Python
python实现比较文件内容异同
Jun 22 Python
python cs架构实现简单文件传输
Mar 20 Python
WIn10+Anaconda环境下安装PyTorch(避坑指南)
Jan 30 Python
详解Python 切片语法
Jun 10 Python
python 哈希表实现简单python字典代码实例
Sep 27 Python
树莓派4B+opencv4+python 打开摄像头的实现方法
Oct 18 Python
pytorch绘制并显示loss曲线和acc曲线,LeNet5识别图像准确率
Jan 02 Python
小白教你PyCharm从下载到安装再到科学使用PyCharm2020最新激活码
Sep 25 Python
地图可视化神器kepler.gl python接口的使用方法
Dec 22 Python
PyQt QMainWindow的使用示例
Mar 24 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中time()和mktime()方法的区别
2013/09/28 PHP
教你如何用php实现LOL数据远程获取
2014/06/10 PHP
ThinkPHP通过AJAX返回JSON的两种实现方法
2014/12/18 PHP
php获取文件名后缀常用方法小结
2015/02/24 PHP
php 遍历目录,生成目录下每个文件的md5值并写入到结果文件中
2016/12/12 PHP
javascript+xml技术实现分页浏览
2008/07/27 Javascript
javascript 跳转代码集合
2009/12/03 Javascript
jquery获得keycode的示例代码
2013/12/30 Javascript
深入分析JSONP跨域的原理
2014/12/10 Javascript
基于javascript实现仿百度输入框自动匹配功能
2016/01/03 Javascript
浅谈js数组和splice的用法
2016/12/04 Javascript
JavaScript实现鼠标点击导航栏变色特效
2017/02/08 Javascript
jquery ui sortable拖拽后保存位置
2017/04/27 jQuery
Vue组件之Tooltip的示例代码
2017/10/18 Javascript
Vue-Router实现组件间跳转的三种方法
2017/11/07 Javascript
详解使用vue-cli脚手架初始化Vue项目下的项目结构
2018/03/08 Javascript
Vue 去除路径中的#号
2018/04/19 Javascript
讲解vue-router之什么是编程式路由
2018/05/28 Javascript
JS实现的冒泡排序,快速排序,插入排序算法示例
2019/03/02 Javascript
小程序点击图片实现png转jpg
2019/10/22 Javascript
原生js实现贪食蛇小游戏的思路详解
2019/11/26 Javascript
vuejs中父子组件之间通信方法实例详解
2020/01/17 Javascript
python 获取指定文件夹下所有文件名称并写入列表的实例
2018/04/23 Python
Python转换itertools.chain对象为数组的方法
2020/02/07 Python
Python pip配置国内源的方法
2020/02/14 Python
深入了解Python enumerate和zip
2020/07/16 Python
HTML5拖拽文件到浏览器并实现文件上传下载功能代码
2013/06/06 HTML / CSS
俄罗斯一家时尚女装商店:Charuel
2019/12/04 全球购物
大学生的网上创业计划书
2013/12/31 职场文书
小学安全教育材料
2014/02/17 职场文书
弘扬职业精神演讲稿
2014/03/20 职场文书
交通事故私了协议书
2014/04/16 职场文书
中等生评语大全
2014/05/04 职场文书
二年级语文上册复习计划
2015/01/19 职场文书
高中生思想道德自我评价
2015/03/09 职场文书
Web应用开发TypeScript使用详解
2022/05/25 Javascript