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实现的监测服务器硬盘使用率脚本分享
Nov 07 Python
Python极简代码实现杨辉三角示例代码
Nov 15 Python
python中安装Scrapy模块依赖包汇总
Jul 02 Python
python3+dlib实现人脸识别和情绪分析
Apr 21 Python
深入分析python数据挖掘 Json结构分析
Apr 21 Python
python得到单词模式的示例
Oct 15 Python
python 两个数据库postgresql对比
Oct 21 Python
pytorch构建多模型实例
Jan 15 Python
Python爬取YY评级分数并保存数据实现过程解析
Jun 01 Python
Django Model层F,Q对象和聚合函数原理解析
Nov 12 Python
利用Python实现学生信息管理系统的完整实例
Dec 30 Python
Python+SeaTable实现计算两个日期间的工作日天数
Jul 07 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编程实现获取excel文档内容的代码实例
2011/06/28 PHP
PHP两种快速排序算法实例
2015/02/15 PHP
php+ajax制作无刷新留言板
2015/10/27 PHP
PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)
2016/12/14 PHP
jquery 插件学习(四)
2012/08/06 Javascript
使用jQueryMobile实现滑动翻页效果的方法
2015/02/04 Javascript
原生 JS Ajax,GET和POST 请求实例代码
2016/06/08 Javascript
使用 bootstrap modal遇到的问题小结
2016/11/09 Javascript
使用JavaScript获取URL中的参数(两种方法)
2016/11/16 Javascript
jQuery实现动态加载瀑布流
2020/09/01 jQuery
原生js实现自定义滚动条组件
2021/01/20 Javascript
[47:50]Secret vs VP 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
学习python (1)
2006/10/31 Python
Python 自动安装 Rising 杀毒软件
2009/04/24 Python
python获取当前时间对应unix时间戳的方法
2015/05/15 Python
python实现在控制台输入密码不显示的方法
2015/07/02 Python
python学习之面向对象【入门初级篇】
2017/01/21 Python
Python实现的堆排序算法原理与用法实例分析
2017/11/22 Python
Python实现连接MySql数据库及增删改查操作详解
2019/04/16 Python
python实现KNN分类算法
2019/10/16 Python
python小程序基于Jupyter实现天气查询的方法
2020/03/27 Python
html5跨域通讯之postMessage的用法总结
2013/11/07 HTML / CSS
canvas 基础之图像处理的使用
2020/04/10 HTML / CSS
阿迪达斯意大利在线商店:adidas意大利
2016/09/19 全球购物
简述数据库的设计过程
2015/06/22 面试题
什么是SQL Server的确定性函数和不确定性函数
2016/08/04 面试题
大学生学年自我鉴定
2014/02/10 职场文书
暑期培训随笔感言
2014/03/10 职场文书
校庆口号
2014/06/20 职场文书
普通党员对照检查材料
2014/08/28 职场文书
2014院党委领导班子对照检查材料思想汇报
2014/09/24 职场文书
学习党的群众路线对照检查材料
2014/09/29 职场文书
标准演讲稿格式结尾应该怎么书写?
2019/07/17 职场文书
应届生个人的求职(自荐信范文2篇)
2019/08/23 职场文书
JS实现页面炫酷的时钟特效示例
2022/08/14 Javascript
go goth封装第三方认证库示例详解
2022/08/14 Golang