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计数排序和基数排序算法实例
Apr 25 Python
python进阶教程之循环对象
Aug 30 Python
Python中Class类用法实例分析
Nov 12 Python
简单介绍Python中的几种数据类型
Jan 02 Python
Python实现输出某区间范围内全部素数的方法
May 02 Python
python 利用栈和队列模拟递归的过程
May 29 Python
pygame游戏之旅 如何制作游戏障碍
Nov 20 Python
Python 中pandas索引切片读取数据缺失数据处理问题
Oct 09 Python
Python requests.post方法中data与json参数区别详解
Apr 30 Python
使用python求斐波那契数列中第n个数的值示例代码
Jul 26 Python
Python Matplotlib简易教程(小白教程)
Jul 28 Python
python 写一个性能测试工具(一)
Oct 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
mysql From_unixtime及UNIX_TIMESTAMP及DATE_FORMAT日期函数
2010/03/21 PHP
php入门学习知识点六 PHP文件的读写操作代码
2011/07/14 PHP
shell脚本作为保证PHP脚本不挂掉的守护进程实例分享
2013/07/15 PHP
PHP原生函数一定好吗?
2014/12/08 PHP
PHP封装CURL扩展类实例
2015/07/28 PHP
全新Mac配置PHP开发环境教程
2016/02/03 PHP
php微信公众号开发之翻页查询
2018/10/20 PHP
PHP实现小程序批量通知推送
2018/11/27 PHP
laravel-admin 管理平台获取当前登陆用户信息的例子
2019/10/08 PHP
PHP函数用法详解【初始化、嵌套、内置函数等】
2020/06/02 PHP
获取Javscript执行函数名称的方法
2006/12/22 Javascript
jquery1.5.1中根据元素ID获取元素对象的代码
2011/04/02 Javascript
js/jquery获取浏览器窗口可视区域高度和宽度以及滚动条高度实现代码
2012/12/17 Javascript
详解javascript传统方法实现异步校验
2016/01/22 Javascript
ReactJs快速入门教程(精华版)
2016/11/28 Javascript
深入理解vue-class-component源码阅读
2019/02/18 Javascript
JS window对象简单操作完整示例
2020/01/14 Javascript
vue3.0中setup使用(两种用法)
2020/12/02 Vue.js
[01:42:49]DOTA2-DPC中国联赛 正赛 iG vs PSG.LGD BO3 第一场 2月26日
2021/03/11 DOTA
python中字典dict常用操作方法实例总结
2015/04/04 Python
python中(str,list,tuple)基础知识汇总
2018/02/20 Python
Python实现读取Properties配置文件的方法
2018/03/29 Python
django输出html内容的实例
2018/05/27 Python
python使用turtle绘制分形树
2018/06/22 Python
Python基于聚类算法实现密度聚类(DBSCAN)计算【测试可用】
2018/12/26 Python
简单了解python变量的作用域
2019/07/30 Python
Python GUI编程学习笔记之tkinter控件的介绍及基本使用方法详解
2020/03/30 Python
python tkinter实现下载进度条及抖音视频去水印原理
2021/02/07 Python
金融行业务员的自我评价
2013/12/13 职场文书
学生鉴定评语大全
2014/05/05 职场文书
诚信承诺书
2015/01/19 职场文书
食品药品安全责任书
2015/05/11 职场文书
2016年度继续教育学习心得体会
2016/01/19 职场文书
PyTorch梯度裁剪避免训练loss nan的操作
2021/05/24 Python
SSM VUE Axios详解
2021/10/05 Vue.js
Java 超详细讲解ThreadLocal类的使用
2022/04/07 Java/Android