eval()函数
分类:
Python
eval()函数十分强大,官方demo解释为:将字符串str当成有效的表达式来求值并返回计算结果。
so,结合math当成一个计算器很好用。
其他用法,可以把list,tuple,dict和string相互转化。
见下例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | 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 )) |
不可谓不强大!
BUT!强大的函数有代价。安全性是其最大的缺点。
想一想这种使用环境:需要用户输入一个表达式,并求值。
如果用户恶意输入,例如:
1 | __import__ ( 'os' ).system( 'dir' ) |
那么eval()之后,你会发现,当前目录文件都会展现在用户前面。
那么继续输入:
1 | open ( '文件名' ).read() |
代码都给人看了。获取完毕,一条删除命令,文件消失。哭吧!
怎么避免安全问题?
1、自行写检查函数;
2、使用ast.literal_eval: 自行查看DOCUMENT
3、更多好文: Restricted "safe" eval(Python recipe)
参考文献
1.【python eval()】https://www.cnblogs.com/dadadechengzi/p/6149930.html
2.【Python:eval的妙用和滥用】https://www.cnblogs.com/yunpiao111/p/5467282.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现