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对指定目录下文件进行批量重命名的方法
Apr 18 Python
Python 网页解析HTMLParse的实例详解
Aug 10 Python
Python的CGIHTTPServer交互实现详解
Feb 08 Python
使用Python通过win32 COM实现Word文档的写入与保存方法
May 08 Python
对命令行模式与python交互模式介绍
May 12 Python
好的Python培训机构应该具备哪些条件
May 23 Python
Python 网络爬虫--关于简单的模拟登录实例讲解
Jun 01 Python
Scrapy框架爬取西刺代理网免费高匿代理的实现代码
Feb 22 Python
PyQt5响应回车事件的方法
Jun 25 Python
Python Tkinter模块 GUI 可视化实例
Nov 20 Python
浅谈Python中的生成器和迭代器
Jun 19 Python
python实现简单倒计时功能
Apr 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中Session的概念
2006/10/09 PHP
YII路径的用法总结
2014/07/09 PHP
ThinkPHP路由机制简介
2016/03/23 PHP
JavaScript 联动的无限级封装类,数据采用非Ajax方式,随意添加联动
2010/06/29 Javascript
HTML DOM的nodeType值介绍
2011/03/31 Javascript
jQuery 复合选择器应用的几个例子
2014/09/11 Javascript
浅谈EasyUI中编辑treegrid的方法
2015/03/01 Javascript
浅谈JavaScript中setInterval和setTimeout的使用问题
2015/08/01 Javascript
AngularJS基础 ng-src 指令简单示例
2016/08/03 Javascript
AngularJs入门教程之环境搭建+创建应用示例
2016/11/01 Javascript
详解webpack编译多页面vue项目的配置问题
2017/12/11 Javascript
JS实现数组简单去重及数组根据对象中的元素去重操作示例
2018/01/05 Javascript
在element-ui的el-tree组件中用render函数生成el-button的实例代码
2018/11/05 Javascript
vue实现购物车抛物线小球动画效果的方法详解
2019/02/13 Javascript
详解auto-vue-file:一个自动创建vue组件的包
2019/04/26 Javascript
浅谈VUE防抖与节流的最佳解决方案(函数式组件)
2019/05/22 Javascript
基于原生js实现九宫格算法代码实例
2020/07/03 Javascript
python写入中英文字符串到文件的方法
2015/05/06 Python
Python实现查询某个目录下修改时间最新的文件示例
2018/08/29 Python
Pytorch保存模型用于测试和用于继续训练的区别详解
2020/01/10 Python
python 写函数在一定条件下需要调用自身时的写法说明
2020/06/01 Python
keras的ImageDataGenerator和flow()的用法说明
2020/07/03 Python
飞利浦比利时官方网站:Philips比利时
2016/08/24 全球购物
客户经理岗位职责
2013/12/08 职场文书
共产党员公开承诺书
2014/03/25 职场文书
诚信承诺书范文
2014/03/27 职场文书
询价采购方案
2014/06/09 职场文书
党员干部群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
2014年初一班主任工作总结
2014/11/08 职场文书
社区节水倡议书
2015/04/29 职场文书
党员反邪教心得体会
2016/01/15 职场文书
党性教育心得体会(共6篇)
2016/01/21 职场文书
关于python爬虫应用urllib库作用分析
2021/09/04 Python
Win11如何启用启动修复 ? Win11执行启动修复的三种方法
2022/04/08 数码科技
Pandas实现批量拆分与合并Excel的示例代码
2022/05/30 Python
前端框架ECharts dataset对数据可视化的高级管理
2022/12/24 Javascript