PYTHON EVAL的用法及注意事项解析


Posted in Python onSeptember 06, 2019

前言

eval是Python的一个内置函数,这个函数的作用是,返回传入字符串的表达式的结果。想象一下变量赋值时,将等号右边的表达式写成字符串的格式,将这个字符串作为eval的参数,eval的返回值就是这个表达式的结果。

python中eval函数的用法十分的灵活,但也十分危险,安全性是其最大的缺点。本文从灵活性和危险性两方面介绍eval。

1、强大之处

举几个例子感受一下,字符串与list、tuple、dict的转化。

a = "[[1,2], [3,4], [5,6], [7,8], [9,0]]"
b = eval(a)
b
Out[3]: [[1, 2], [3, 4], [5, 6], [7, 8], [9, 0]]
type(b)
Out[4]: list
a = "{1: 'a', 2: 'b'}"
b = eval(a)
b
Out[7]: {1: 'a', 2: 'b'}
type(b)
Out[8]: dict
a = "([1,2], [3,4], [5,6], [7,8], (9,0))"
b = eval(a)
b
Out[11]: ([1, 2], [3, 4], [5, 6], [7, 8], (9, 0)) 

eval的语法格式如下:

eval(expression[, globals[, locals]])

强大吧,给个字符串给eval,eval给你一个表达式返回值。

globals : 变量作用域,全局命名空间,如果被提供,则必须是一个字典对象。expression : 字符串

locals : 变量作用域,局部命名空间,如果被提供,可以是任何映射对象。

结合globals和locals看看几个例子

传递globals参数值为{“age”:1822},

eval("{'name':'linux','age':age}",{"age":1822})

输出结果

eval("{'name':'linux','age':age}",{"age":1822}) 

再加上locals变量

eval("{'name':'linux','age':age}",{"age":1822},locals())

当两个参数都不为空时,先查找locals参数,再查找globals参数,locals参数中同名变量会覆盖globals中的变量。根据上面两个例子可以看到当locals参数为空,globals参数不为空时,查找globals参数中是否存在变量,并计算。

2、危险之处

eval虽然方便,但是要注意安全性,可以将字符串转成表达式并执行,就可以利用执行系统命令,删除文件等操作。

假设用户恶意输入。比如:

eval("__import__('os').system('ls /home/pythontab.com/www/')") 

那么eval()之后,你会发现,当前文件夹文件都会展如今用户前面。这句其实相当于执行了

os.system('ls /home/pythontab.com/www/')

那么继续输入:

eval("__import__('os').system('cat /home/pythontab.com/www/test.sql')")

代码都给人看了。

再来一条删除命令,文件消失。比如

eval("__import__('os').system('rm /home/pythontab.com/www/test.data')")

所以使用eval,一方面享受他的了灵活性同时,也要注意安全性。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python使用any判断一个对象是否为空的方法
Nov 19 Python
python正则中最短匹配实现代码
Jan 16 Python
Python实现检测文件MD5值的方法示例
Apr 11 Python
python实现简单tftp(基于udp协议)
Jul 30 Python
python 制作自定义包并安装到系统目录的方法
Oct 27 Python
在python中对变量判断是否为None的三种方法总结
Jan 23 Python
Python Request爬取seo.chinaz.com百度权重网站的查询结果过程解析
Aug 13 Python
Python GUI库PyQt5样式QSS子控件介绍
Feb 25 Python
解决在keras中使用model.save()函数保存模型失败的问题
May 21 Python
Python如何实现后端自定义认证并实现多条件登陆
Jun 22 Python
python实现简单倒计时功能
Apr 21 Python
python Django框架快速入门教程(后台管理)
Jul 21 Python
Python实现微信机器人的方法
Sep 06 #Python
Linux下通过python获取本机ip方法示例
Sep 06 #Python
django-crontab 定时执行任务方法的实现
Sep 06 #Python
Python使用matplotlib实现交换式图形显示功能示例
Sep 06 #Python
python自动发微信监控报警
Sep 06 #Python
Python使用Slider组件实现调整曲线参数功能示例
Sep 06 #Python
Python scipy的二维图像卷积运算与图像模糊处理操作示例
Sep 06 #Python
You might like
浅谈PHP调用Webservice思路及源码分享
2014/06/04 PHP
PHP中上传多个文件的表单设计例子
2014/11/19 PHP
php设计模式之享元模式分析【星际争霸游戏案例】
2020/03/23 PHP
FusionCharts图表显示双Y轴双(多)曲线
2012/11/22 Javascript
js实现图片轮换效果代码
2013/04/16 Javascript
使用javascript实现页面定时跳转总结篇
2013/09/21 Javascript
js取整数、取余数的方法
2014/05/11 Javascript
JavaScript常用标签和方法总结
2015/09/01 Javascript
js实现的星星评分功能函数
2015/12/09 Javascript
jQuery使用contains过滤器实现精确匹配方法详解
2016/02/25 Javascript
js正则表达式注册页面表单验证
2016/10/11 Javascript
利用纯Vue.js构建Bootstrap组件
2016/11/03 Javascript
详解Vue自定义过滤器的实现
2017/01/10 Javascript
javascript事件的绑定基础实例讲解(34)
2017/02/14 Javascript
Vue.js 实现微信公众号菜单编辑器功能(二)
2018/05/08 Javascript
VUE 3D轮播图封装实现方法
2018/07/03 Javascript
Vue下拉框回显并默认选中随机问题
2018/09/06 Javascript
python动态性强类型用法实例
2015/05/09 Python
Django中的CACHE_BACKEND参数和站点级Cache设置
2015/07/23 Python
Python实现破解12306图片验证码的方法分析
2017/12/29 Python
Python读取英文文件并记录每个单词出现次数后降序输出示例
2018/06/28 Python
python实现定时发送qq消息
2019/01/18 Python
pytorch 使用单个GPU与多个GPU进行训练与测试的方法
2019/08/19 Python
python程序 线程队列queue使用方法解析
2019/09/23 Python
解决Python Matplotlib绘图数据点位置错乱问题
2020/05/16 Python
如何快速理解python的垃圾回收机制
2020/09/01 Python
CSS3 实现发光边框特效
2020/11/11 HTML / CSS
html5 Web SQL Database 之事务处理函数transaction与executeSQL解析
2013/11/07 HTML / CSS
英国豪华家具和家居用品购物网站:Teddy Beau
2020/10/12 全球购物
修理厂厂长岗位职责
2014/01/30 职场文书
企业党员公开承诺书
2014/03/26 职场文书
《云房子》教学反思
2014/04/20 职场文书
病媒生物防治方案
2014/05/13 职场文书
财务会计专业自荐书
2014/06/30 职场文书
拾金不昧通报表扬范文
2015/05/05 职场文书
java调用Restful接口的三种方法
2021/08/23 Java/Android