【Python】eval函数


eval函数比较强大,能够把字符串当成有效表达式来求值并返回计算结果

注:以下代码是在IPython中运行的结果

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

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

# 将字符串转化为列表
In [3]: type(eval("[1,2,3]"))
Out[3]: list

# 将字符串转化为字典
In [4]: type(eval("{'name':'Zhangsan','age':23}"))
Out[4]: dict

01.不要滥用eval

在开发的时候千万不要使用eval直接转换input的结果
具体的原因是:

__import__('os').system('ls')

等价于:

import os
os.system("ls")

执行成功,则返回0
执行失败,则返回错误信息

02.案例说明

input_str = input("请输入一道算术题:")
print(input_str+"的结果是:", eval(input_str))

程序运行后,输入代码:__import__('os').system('cat Demo3.py')后可以查看整个Demo3.py文件的内容,这就存在风险了。有可能代码被人看完后,直接被rm -f Demo3.py 删除了。如果遇到恶意黑客,并且服务器是Linux服务器,直接使用 rm -rf / ,那就真的是没戏了,一切都完了!

原文地址:https://www.cnblogs.com/OliverQin/p/12222180.html