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 /
,那就真的是没戏了,一切都完了!