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获取任意xml节点值的方法
May 05 Python
python机器学习实战之树回归详解
Dec 20 Python
python编程嵌套函数实例代码
Feb 11 Python
python实现12306抢票及自动邮件发送提醒付款功能
Mar 08 Python
使用python生成目录树
Mar 29 Python
浅谈Pandas 排序之后索引的问题
Jun 07 Python
一文带你了解Python中的字符串是什么
Nov 20 Python
Python QQBot库的QQ聊天机器人
Jun 19 Python
python 实现多维数组(array)排序
Feb 28 Python
在matplotlib中改变figure的布局和大小实例
Apr 23 Python
Python实现异步IO的示例
Nov 05 Python
Pytorch GPU内存占用很高,但是利用率很低如何解决
Jun 01 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上传图片客户端和服务器端实现方法
2015/03/30 PHP
PHP查询附近的人及其距离的实现方法
2016/05/11 PHP
JavaScript格式化数字的函数代码
2010/11/30 Javascript
js 实现在离开页面时提醒未保存的信息(减少用户重复操作)
2013/01/16 Javascript
非常漂亮的JS+CSS图片幻灯切换特效
2013/11/20 Javascript
JavaScript中对循环语句的优化技巧深入探讨
2014/06/06 Javascript
jQuery实现Div拖动+键盘控制综合效果的方法
2015/03/10 Javascript
jQuery中$.ajax()和$.getJson()同步处理详解
2015/08/12 Javascript
JS+HTML5手机开发之滚动和惯性缓动实现方法分析
2016/06/12 Javascript
js 将input框中的输入自动转化成半角大写(税号输入框)
2017/02/16 Javascript
JS实现的Unicode编码转换操作示例
2017/04/28 Javascript
jQuery+HTML5实现WebGL高性能烟花绽放动画效果【附demo源码下载】
2017/08/18 jQuery
总结js函数相关知识点
2018/02/27 Javascript
layui 表格的属性的显示转换方法
2018/08/14 Javascript
jquery轮播图插件使用方法详解
2020/07/31 jQuery
[03:46]DAC趣味视频-中文考试.mp4
2017/04/02 DOTA
python爬虫基本知识
2018/03/05 Python
详解Python下Flask-ApScheduler快速指南
2018/11/04 Python
python实现AES加密与解密
2019/03/28 Python
python使用time、datetime返回工作日列表实例代码
2019/05/09 Python
python栈的基本定义与使用方法示例【初始化、赋值、入栈、出栈等】
2019/10/24 Python
Python openpyxl模块原理及用法解析
2020/01/19 Python
解决Jupyter Notebook使用parser.parse_args出现错误问题
2020/04/20 Python
使用Keras 实现查看model weights .h5 文件的内容
2020/06/09 Python
世界经理人咨询有限公司面试
2014/09/23 面试题
Shell编程面试题
2012/05/30 面试题
店长岗位的工作内容
2013/11/12 职场文书
CAD制图人员的自荐信
2014/02/07 职场文书
工作推荐信范文
2014/05/10 职场文书
2014年作风建设工作总结
2014/10/29 职场文书
2015大学生入党个人自传
2015/06/26 职场文书
证婚人致辞精选
2015/07/28 职场文书
祝福语集锦:送给闺蜜的生日祝福语
2019/10/08 职场文书
Win11 21h2可以升级22h2吗?看看你的电脑符不符合要求
2022/07/07 数码科技
python如何利用cv2.rectangle()绘制矩形框
2022/12/24 Python