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 相关文章推荐
使用C语言扩展Python程序的简单入门指引
Apr 14 Python
python入门教程之识别验证码
Mar 04 Python
python中numpy的矩阵、多维数组的用法
Feb 05 Python
python web基础之加载静态文件实例
Mar 20 Python
总结python中pass的作用
Feb 27 Python
Python中输入和输出(打印)数据实例方法
Oct 13 Python
Python脚本如何在bilibili中查找弹幕发送者
Jun 04 Python
Python 实现将numpy中的nan和inf,nan替换成对应的均值
Jun 08 Python
基于python实现MQTT发布订阅过程原理解析
Jul 27 Python
python tqdm实现进度条的示例代码
Nov 10 Python
使用Pytorch搭建模型的步骤
Nov 16 Python
python3中数组逆序输出方法
Dec 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
超神学院:天使彦公认最美的三个视角,网友:我的天使快下凡吧!
2020/03/02 国漫
php array_filter除去数组中的空字符元素
2020/06/21 PHP
关于 Laravel Redis 多个进程同时取队列问题详解
2017/12/25 PHP
Laravel 自动转换长整型雪花 ID 为字符串的实现
2020/10/27 PHP
jQuery帮助之CSS尺寸(五)outerHeight、outerWidth
2009/11/14 Javascript
获取div编辑框,textarea,input text的光标位置 兼容IE,FF和Chrome的方法介绍
2012/11/08 Javascript
IE6下opacity与JQuery的奇妙结合
2013/03/01 Javascript
jquery动画效果学习笔记(8种效果)
2015/11/13 Javascript
Jquery ajax加载等待执行结束再继续执行下面代码操作
2015/11/24 Javascript
详解Javascript中DOM的范围
2017/02/13 Javascript
VUE + UEditor 单图片跨域上传功能的实现方法
2018/02/08 Javascript
vue+php实现的微博留言功能示例
2019/03/16 Javascript
ES6 Generator函数的应用实例分析
2019/06/26 Javascript
Vue实现回到顶部和底部动画效果
2019/07/31 Javascript
vue下使用nginx刷新页面404的问题解决
2019/08/02 Javascript
js中比较两个对象是否相同的方法示例
2019/09/02 Javascript
vue在响应头response中获取自定义headers操作
2020/07/24 Javascript
[01:03:36]Ti4 循环赛第三日DK vs Titan
2014/07/12 DOTA
在Python的setuptools框架下生成egg的教程
2015/04/13 Python
构建Python包的五个简单准则简介
2015/06/15 Python
python PyTorch预训练示例
2018/02/11 Python
Python实现修改IE注册表功能示例
2018/05/10 Python
python如何爬取个性签名
2018/06/19 Python
Python给图像添加噪声具体操作
2019/03/03 Python
20行Python代码实现一款永久免费PDF编辑工具的实现
2020/08/27 Python
Django web自定义通用权限控制实现方法
2020/11/24 Python
Python开发.exe小工具的详细步骤
2021/01/27 Python
香港百佳网上超级市场:PARKNSHOP.com
2020/06/10 全球购物
新锐科技Java程序员面试题
2016/07/25 面试题
计算机通信专业推荐信
2014/02/22 职场文书
明星邀请函
2015/02/02 职场文书
农村婚庆主持词
2015/06/29 职场文书
2015年学校办公室主任工作总结
2015/07/20 职场文书
团队拓展训练心得体会
2016/01/12 职场文书
原生Js 实现的简单无缝滚动轮播图的示例代码
2021/05/10 Javascript
SpringCloud项目如何解决log4j2漏洞
2022/04/10 Java/Android