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修改操作系统时间的方法
May 18 Python
Linux中安装Python的交互式解释器IPython的教程
Jun 13 Python
Ubuntu下使用Python实现游戏制作中的切分图片功能
Mar 30 Python
pandas object格式转float64格式的方法
Apr 10 Python
python opencv实现切变换 不裁减图片
Jul 26 Python
对python中的float除法和整除法的实例详解
Jul 20 Python
Python实现报警信息实时发送至邮箱功能(实例代码)
Nov 11 Python
Python 实现取多维数组第n维的前几位
Nov 26 Python
python装饰器的特性原理详解
Dec 25 Python
Python 识别12306图片验证码物品的实现示例
Jan 20 Python
关于tf.nn.dynamic_rnn返回值详解
Jan 20 Python
Python读取文件夹下的所有文件实例代码
Apr 02 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
Zerg基本策略
2020/03/14 星际争霸
德生BCL3000的电路分析和打磨
2021/03/02 无线电
让PHP显示Facebook的粉丝数量方法
2014/01/08 PHP
PHP rsa加密解密算法原理解析
2020/12/09 PHP
通用javascript脚本函数库 方便开发
2009/10/13 Javascript
Extjs优化(二)Form表单提交通用实现
2013/04/15 Javascript
JS onmousemove鼠标移动坐标接龙DIV效果实例
2013/12/16 Javascript
window.location不跳转的问题解决方法
2014/04/17 Javascript
JavaScript中switch判断容易犯错的一个细节
2014/08/27 Javascript
javascript数组遍历for与for in区别详解
2014/12/04 Javascript
javascript实现获取浏览器版本、操作系统类型
2015/01/29 Javascript
在JavaScript中对HTML进行反转义详解
2016/05/18 Javascript
javascript html5轻松实现拖动功能
2017/03/01 Javascript
jQuery实现模糊查询的方法分析
2018/05/10 jQuery
你不知道的Vue技巧之--开发一个可以通过方法调用的组件(推荐)
2019/04/15 Javascript
vue2.0 解决抽取公用js的问题
2020/07/31 Javascript
js实现头像上传并且可预览提交
2020/12/25 Javascript
pycharm new project变成灰色的解决方法
2019/06/27 Python
python字典嵌套字典的情况下找到某个key的value详解
2019/07/10 Python
Django 模型类(models.py)的定义详解
2019/07/19 Python
Python3中urlencode和urldecode的用法详解
2019/07/23 Python
Python SELENIUM上传文件或图片实现过程
2019/10/28 Python
基于virtualenv创建python虚拟环境过程图解
2020/03/30 Python
aws 通过boto3 python脚本打pach的实现方法
2020/05/10 Python
Perfume’s Club德国官网:在线购买香水
2019/04/08 全球购物
列车长先进事迹材料
2014/01/25 职场文书
药剂专业毕业生求职信
2014/06/24 职场文书
四风问题个人剖析材料
2014/10/07 职场文书
2014年学校财务工作总结
2014/12/06 职场文书
同步小康驻村工作简报
2015/07/20 职场文书
离婚财产分割协议书
2015/08/11 职场文书
MySQL 如何分析查询性能
2021/05/12 MySQL
详解Vue的options
2021/05/15 Vue.js
mysql联合索引的使用规则
2021/06/23 MySQL
一条慢SQL语句引发的改造之路
2022/03/16 MySQL
Nginx如何获取自定义请求header头和URL参数详解
2022/07/23 Servers