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和C语言混合编程实例
Jun 04 Python
Python图像的增强处理操作示例【基于ImageEnhance类】
Jan 03 Python
OpenCV+Python识别车牌和字符分割的实现
Jan 31 Python
python 调用钉钉机器人的方法
Feb 20 Python
python mac下安装虚拟环境的图文教程
Apr 12 Python
python绘制评估优化算法性能的测试函数
Jun 25 Python
python多进程并发demo实例解析
Dec 13 Python
pip install 使用国内镜像的方法示例
Apr 03 Python
用python实现名片管理系统
Jun 18 Python
浅谈Python爬虫原理与数据抓取
Jul 21 Python
python制作微博图片爬取工具
Jan 16 Python
利用Opencv实现图片的油画特效实例
Feb 28 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
Ajax实时验证用户名/邮箱等是否已经存在的代码打包
2011/12/01 PHP
Laravel 关联模型-关联新增和关联更新的方法
2019/10/10 PHP
php中数组最简单的使用方法
2020/12/27 PHP
JavaScript游戏之是男人就下100层代码打包
2010/11/08 Javascript
js字母大小写转换实现方法总结
2013/11/13 Javascript
js+css实现tab菜单切换效果的方法
2015/01/20 Javascript
js实现图片和链接文字同步切换特效的方法
2015/02/20 Javascript
黑帽seo劫持程序,js劫持搜索引擎代码
2015/09/15 Javascript
angularjs 中$apply,$digest,$watch详解
2016/10/13 Javascript
原生js实现节日时间倒计时功能
2017/01/18 Javascript
node 使用 async 控制并发的方法
2018/05/07 Javascript
javascript实现打砖块小游戏(附完整源码)
2020/09/18 Javascript
[08:02]DOTA2牵红线 zhou神抱得美人归
2014/03/22 DOTA
Python脚本实现格式化css文件
2015/04/08 Python
CentOS 6.5下安装Python 3.5.2(与Python2并存)
2017/06/05 Python
python字典操作实例详解
2017/11/16 Python
Python使用Django实现博客系统完整版
2020/09/29 Python
opencv 图像礼帽和图像黑帽的实现
2020/07/07 Python
解决Python paramiko 模块远程执行ssh 命令 nohup 不生效的问题
2020/07/14 Python
Python爬虫之Selenium鼠标事件的实现
2020/12/04 Python
利用CSS3 动画 绘画 圆形动态时钟
2018/03/20 HTML / CSS
迪卡侬荷兰官网:Decathlon荷兰
2017/10/29 全球购物
马来西亚网上购物平台:ezbuy
2018/02/13 全球购物
澳大利亚Mocha官方网站:包、钱包、珠宝和配饰
2019/07/18 全球购物
英国复古服装购物网站:Collectif
2019/10/30 全球购物
四年的个人工作自我评价
2013/12/10 职场文书
学前教育毕业生自荐信范文
2013/12/24 职场文书
电子专业毕业生自我鉴定
2014/01/22 职场文书
社区庆八一活动方案
2014/02/02 职场文书
xxx同志考察材料
2014/02/07 职场文书
单位工程竣工验收方案
2014/03/16 职场文书
颁奖晚会主持词
2014/03/25 职场文书
招商引资工作汇报材料
2014/10/28 职场文书
2016五一劳动节慰问信
2015/11/30 职场文书
springboot新建项目pom.xml文件第一行报错的解决
2022/01/18 Java/Android
国产动画《万圣街》日语配音版制作决定!
2022/03/20 国漫