eval函数在Python中做数据类型的转换还是很有用的。它的作用就是把数据还原成它本身或者是能够转化成的数据类型。那么eval和ast.literal_val()的区别是什么呢?本文将大家介绍关于Python中函数eval和ast.literal_eval区别的相关资料,需要的朋友可以参考下。

前言

众所周知在Python中,如果要将字符串型的list,tuple,dict转变成原有的类型呢? 这个时候你自然会想到eval. eval函数在python中做数据类型的转换还是很有用的。它的作用就是把数据还原成它本身或者是能够转化成的数据类型.下面来看看示例代码:

string <==> list

string <==> tuple

string <==> dict

也就是说,使用eval可以实现从元祖,列表,字典型的字符串到元祖,列表,字典的转换,此外,eval还可以对字符
串型的输入直接计算。比如,她会将'1+1'的计算串直接计算出结果。

从上面来看,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官方文档

简单点说ast模块就是帮助Python应用来处理抽象的语法解析的。而该模块下的literal_eval()函数:则会判断需要计算的内容计算后是不是合法的python类型,如果是则进行运算,否则就不进行运算。

比如说上面的计算操作,及危险操作,如果换成了ast.literal_eval() ,都会拒绝执行。

报值错误,不合法的字符串!

而只会执行合法的Python类型,从而大大降低系统的危险性!

所以出于安全考虑,对字符串进行类型转换的时候,最好使用ast.literal_eval()函数!

总结

以上就是Python中关于eval函数与ast.literal_eval使用的区别介绍(图文)的详细内容,更多请关注php中文网其它相关文章!

转载于:https://www.cnblogs.com/wangbin2188/p/11240797.html

ast.literal_eval(转)相关推荐

  1. 建议使用更加安全的ast.literal_eval去替代eval

    前言 如果大家想要在python中将字符串转换成列表,数字,字典等操作,都会想到使用eval(),确实这个函数很好用,但是它却存在一定的安全性 eval的漏洞 如果用户使用如下的代码 open(r'D ...

  2. python3 eval安全替代函数ast.literal_eval

    一.eval函数 eval()官方文档里面给出来的功能解释是:将字符串string对象转化为有效的表达式参与求值运算返回计算结果. 示例: >>> s='8*8' >>& ...

  3. ast.literal_eval

    eval函数在python中做数据类型的转换还是很有用的.它的作用就是把数据还原成它本身或者是能够转化成的数据类型. 那么eval和ast.literal_val()的区别是什么呢? eval在做计算 ...

  4. python3 eval安全替代函数ast.literal_eval的区别

    python3 eval安全替代函数ast.literal_eval 一.eval函数 eval()官方文档里面给出来的功能解释是:将字符串string对象转化为有效的表达式参与求值运算返回计算结果. ...

  5. python查询mysql decimal报错_python读取MySQL数据表时,使用ast模块转换decimal格式数据的坑...

    概述 MySQL中常用的数据格式有tinyint().int().float().double().decimal() .varchar.enum().datetime;小数格式中decimal比较常 ...

  6. python利用xlrd模块读取xls表格选中某列提取全部数值,使用re去除英文字母,用ast将str类型转换成list

    python利用xlrd模块读取xls表格选中某列提取全部数值,使用re去除英文字母,用ast将str类型转换成list import ast # 获取xls表中的代码并去重 import xlrd ...

  7. Python 将字符串转为字典

    引言 在工作中遇到一个小问题,需要将一个 Python 的字符串转为字典,比如字符串: user_info = '{"name" : "john", " ...

  8. python 字符串 转 dict

    比直接eval更好的方法>>>import ast >>>ast.literal_eval("{'muffin' : 'lolz', 'foo' : 'k ...

  9. python将string转换为json_python -- 将string转换成dict的方法

    装载自:http://smilejay.com/2014/10/convert_string_to_dict_python/ 我将数据库连接相关的一些用户名/密码/host/port等各种东西作为一个 ...

最新文章

  1. B树、B+树其实很简单,看不懂你找我
  2. DIET:Dual Intent and Entity Transformer
  3. windows SOCKET编程
  4. matlab遗传算法无人机问题,基于改进遗传算法的无人机路径规划
  5. 使用TR1的智能指针
  6. ActionT 无参数委托详解
  7. 什么是BusyBox?
  8. linux ps 命令使用
  9. python-演练-通过描述符来控制另一个类的实例化参数
  10. 卡尔曼滤波算法及C语言实现(转载)
  11. js做的flash形式的幻灯图片
  12. php入门代码 基础慕课,php基础入门
  13. arcpy 创建弧度制与十进制互换的个人工具箱
  14. Activiti流程实例管理
  15. C#:String.Format数字格式化输出 {0:N2} {0:D2} {0:C2}...
  16. CUDA优化之PReLU性能调优
  17. 不知名程序员金山云大米云主机体验日志
  18. [Windows]Win10/Win11切换专业工作站版本
  19. HttpStatus499
  20. 关于ttyS与ttySAC

热门文章

  1. 计算机如何查找目标,如何使用命令行查找计算机地理位置? | MOS86
  2. 布谷鸟沙盒分析静态文件_“案例沙盒方法”喜提国际商学院协会(AACSB)2019年启发式创新奖...
  3. android h5使用缓存_Android SDK 的 H5 打通方案演进 | 数据采集
  4. Mac 运行 psql postgres 报错
  5. 【RK3399Pro学习笔记】六、ROS发布者Publisher的编程实现
  6. JavaScript HTML DOM
  7. 将time_t格式的字符串转换成具体的时间, 存放在SystemTime结构体中
  8. Samba服务全攻略
  9. Linux中自带正则表达式应用举例
  10. [react] 在React中如何避免不必要的render?