Python之eval的使用

本文深入探讨了Python中eval函数的功能与应用,包括基本的数学计算、字符串重复、类型转换等。同时,强调了在开发中直接使用eval处理用户输入的安全风险,如可能引发的文件操作等潜在威胁。

eval的使用

eval()函数十分强大,将字符串 当成 有效的表达式 来求值 并 返回计算结果。

举个栗子
>ipython
Python 3.7.1 (v3.7.1:260ec2c36a, Oct 20 2018, 14:57:15) [MSC v.1915 64 bit (AMD64)]
Type 'copyright', 'credits' or 'license' for more information
IPython 7.2.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]: eval("1 + 1")  # 基本的数学计算
Out[1]: 2

In [2]: eval("'*' * 10")  # 字符串重复
Out[2]: '**********'

In [3]: type(eval("[1, 2, 3, 4, 5]"))  # 将字符串转换成列表
Out[3]: list

In [4]: type(eval("{'name': 'xiaoming', 'age': 18}"))  # 将字符串转换成字典
Out[4]: dict

In [5]: exit

>

不要滥用 eval,就像下面:

简单计算器——实现加减乘除混合运算
input_str = input("请输入一个算术题:")
print(input_str+"的结果是:", eval(input_str))

在开发时千万不要使用 eval 直接转换 input 的结果

原因:
__import__('os').system('ls')

# 等价代码
import os
os.system("终端命令")
  • 执行成功,返回 0
  • 执行失败,返回错误信息
附录:windows下常用新建文件命令:
# 创建文件夹:md 文件夹名
# 创建空的文件:type nul>文件名
# 创建有内容文件:echo "内容">文件名
# 查看文件内容:type +文件名
# 查看目录及子文件:dir
# 删除空文件夹:rd 文件夹名
# 删除文件及所有子文件:rd /s/q 文件夹名
# 删除文件:del 文件名
接着上面计算器的代码执行:

用户在输入框内执行如下非破坏性代码

# 新建文件
> 请输入一个算术题:__import__('os').system('echo "new file"> 新文件.txt')
__import__('os').system('echo "new file"> 新文件.txe')的结果是: 0
# 删除文件
> 请输入一个算术题:__import__('os').system('del 新文件.txt')
__import__('os').system('del 新文件.txe')的结果是: 0

不要滥用eval,尤其是在开发时千万不要使用 eval 直接转换 input 的结果!!!

转载于:https://www.cnblogs.com/onefine/p/10499383.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值