网易首页 > 网易号 > 正文 申请入驻

Python 内置函数:eval( )

0
分享至

内置函数 eval() 可以将字符串形式的表达式当作 Python 代码进行执行,并返回表达式的结果。

虽然 eval() 在某些场景下可以简化代码、提升灵活性,但它也存在严重的安全风险。因此,掌握它的原理、使用场景与限制,对于写出安全、健壮的 Python 程序至关重要。

一、函数语法

eval(expression, globals=None, locals=None)

参数:

expression :字符串类型,必须是一个合法的 Python 表达式(不是完整语句,比如不能是 for 或 def)。

globals :可选。用于指定全局命名空间(字典形式)。

locals :可选。用于指定局部命名空间(字典形式)。

返回值:

执行表达式后的计算结果。

二、基本用法举例

1、计算字符串形式的数学表达式

expr = "3 * (4 + 5)"
result = eval(expr)
print(result)  # 输出:27

2、直接使用变量

x = 10
print(eval("x + 5"))  # 输出:15

3、动态访问对象属性

class Person:
    name = "Alice"

print(eval("Person.name"))  # 输出:Alice

4、控制执行环境(使用 globals 和 locals)

为了避免 eval() 执行危险代码,可以通过设置受限的作用域。

示例:限制变量访问

expr = "x + y"
globals_dict = {"x": 5}
locals_dict = {"y": 10}
print(eval(expr, globals_dict, locals_dict))  # 输出:15

示例:禁用内置函数(安全沙箱)

safe_globals = {"__builtins__": None}
eval("2 + 3", safe_globals)  # 输出:5

提示:

这种“沙箱”机制并不完全可靠,不建议用于非信任来源的输入。

三、安全风险与替代方案

eval() 会执行任意代码,一旦处理了来自不可信来源的字符串,极易导致安全漏洞,例如:

user_input = "__import__('os').system('rm -rf /')"  # ❌ 危险!
eval(user_input)

可能会造成文件被删除、数据泄露以及权限被控制等情况。

替代方案:

(1)若只是用于表达式计算,可使用 ast.literal_eval()(更安全)。

ast.literal_eval() 只能安全解析 Python 字面量(如字符串、数字、列表、字典、元组等)

import ast

print(ast.literal_eval("{'a': 1, 'b': 2}"))  # ✅ 安全
# print(ast.literal_eval("os.system('ls')"))  # ❌ 报错,阻止危险操作

(2)若处理复杂语句,应使用 ,但风险可能更大。

(3)若仅为数学表达式计算,可使用 模块、第三方库如 numexpr、sympy。

四、补充说明

1、不要在生产代码中直接使用 eval() 处理用户数据。

2、尽可能使用专用解析函数替代。

3、如果必须使用,务必限制执行环境(如禁用内建函数)并严格校验输入格式。

4、总之,能不用 eval() 的地方,最好不要用。非用不可的地方,也要加倍小心。

点赞有美意,赞赏是鼓励

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
笑不活了!这老爸操作真绝啊,防止高二女儿早恋,直接暑假带闺女跑长沙、武汉旅游,把小姑娘晒成“黑人”

笑不活了!这老爸操作真绝啊,防止高二女儿早恋,直接暑假带闺女跑长沙、武汉旅游,把小姑娘晒成“黑人”

番外行
2026-08-21 09:33:46
特朗普:我要在深圳见金正恩!王毅:不作评论

特朗普:我要在深圳见金正恩!王毅:不作评论

呼呼历史论
2026-08-23 05:57:08
宁死不向中国低头!铃木退出中国市场,铃木修曾说:“我就是死,也不会向中国市场低头!”随后,以1块的价格,把铃木50%的股份卖给了长安

宁死不向中国低头!铃木退出中国市场,铃木修曾说:“我就是死,也不会向中国市场低头!”随后,以1块的价格,把铃木50%的股份卖给了长安

扶苏聊历史
2026-08-22 17:24:17
2000万+再陪一年!魏莹陪睡内幕炸裂,父亲亲口承认每月赴约

2000万+再陪一年!魏莹陪睡内幕炸裂,父亲亲口承认每月赴约

古事寻踪记
2026-08-24 14:30:56
唐师曾离世,他最大遗憾不是别的,而是那个在病重期间照顾的前妻

唐师曾离世,他最大遗憾不是别的,而是那个在病重期间照顾的前妻

社会日日鲜
2026-08-24 08:30:00
随着丁俊晖1-5惨败,小特5-0大胜,武汉公开赛首日中国4胜5负收官

随着丁俊晖1-5惨败,小特5-0大胜,武汉公开赛首日中国4胜5负收官

小火箭爱体育
2026-08-23 22:26:41
2016年,易建联花重金在洛杉矶买下的豪宅,如今出售值多少钱?

2016年,易建联花重金在洛杉矶买下的豪宅,如今出售值多少钱?

皮皮电影
2026-08-24 14:13:33
安徽一上市公司董事长涉嫌醉驾被取保候审!

安徽一上市公司董事长涉嫌醉驾被取保候审!

凤凰网安徽
2026-08-24 10:18:21
全网大乌龙!王菲陪看演唱会的普通人,真实身份吓到无数人!

全网大乌龙!王菲陪看演唱会的普通人,真实身份吓到无数人!

陈意小可爱
2026-08-24 07:43:52
妻子晋升后要离婚,我默然接下组织调任,再见她追悔莫及我却畅快

妻子晋升后要离婚,我默然接下组织调任,再见她追悔莫及我却畅快

红豆讲堂
2025-07-14 11:36:25
央视五套今日焦点赛事!CCTV5直播:中国女排面临重大考验,力争连胜

央视五套今日焦点赛事!CCTV5直播:中国女排面临重大考验,力争连胜

运动小看台
2026-08-24 06:51:37
铁路官方回应"先买大人票 再退掉只留儿童票"

铁路官方回应"先买大人票 再退掉只留儿童票"

看看新闻Knews
2026-08-24 12:14:23
利物浦头号水货!全场灾难级拉胯!球迷怒喷:队史最差引援

利物浦头号水货!全场灾难级拉胯!球迷怒喷:队史最差引援

澜归序
2026-08-24 08:37:11
莫言:一个人最好的活法——衣服少买,饭少吃,给生活做减法

莫言:一个人最好的活法——衣服少买,饭少吃,给生活做减法

杏花烟雨江南的碧园
2026-08-21 11:15:03
许家印判无期才3天,白珊珊私生活被扒,被曝悄悄嫁给了这个男人

许家印判无期才3天,白珊珊私生活被扒,被曝悄悄嫁给了这个男人

刘森森
2026-08-22 10:05:42
花的都是百姓财政收入,公职人员全部收入明细该向民众透明吗?

花的都是百姓财政收入,公职人员全部收入明细该向民众透明吗?

你在偷看谁
2026-08-10 21:22:11
仅剩最后1年!国防部亮底牌了,官方连发3大动作,解放军剑指台海

仅剩最后1年!国防部亮底牌了,官方连发3大动作,解放军剑指台海

老嫅尾声体育解说
2026-08-23 22:11:38
19年张扣扣被执行死刑当天,被害者家属语出惊人,当庭说出8个字

19年张扣扣被执行死刑当天,被害者家属语出惊人,当庭说出8个字

麓谷隐士
2026-07-13 10:05:15
第二个许家印!又一首富栽了!世界500强竟是假的,千亿帝国清零

第二个许家印!又一首富栽了!世界500强竟是假的,千亿帝国清零

蜉蝣说
2026-07-17 09:47:08
哈兰德剪去标志性长发 维京人也留短发

哈兰德剪去标志性长发 维京人也留短发

甜份超标的我
2026-08-23 21:21:16
2026-08-24 15:15:00
MediaTea
MediaTea
专业的数字媒体、新媒体技术
2087文章数 86关注度
往期回顾 全部

科技要闻

“捂脸跑”机器人火出圈,它自己想出来的

头条要闻

牛弹琴:日理万机的特朗普久久不能入睡 凌晨1点发飙

头条要闻

牛弹琴:日理万机的特朗普久久不能入睡 凌晨1点发飙

体育要闻

42张照片 珍藏世界杯的热辣滚烫

娱乐要闻

张韶涵演唱会突发不适,本人发文道歉

财经要闻

泡泡玛特,最大的问题才刚显现

汽车要闻

智能超混 国民家轿 上汽大众ID. ERA 5S上市 限时8.99万元起

态度原创

本地
家居
艺术
数码
公开课

本地新闻

《牛来》的一声“妈妈”,到底多少人被精神污染了

家居要闻

2026建博会(广州) 公装联探展交流活动

艺术要闻

张立平 2026年8月油画新作

数码要闻

性能暴涨!小米玄戒O3架构揭晓:10核全大核CPU+16核G2Ultra GPU

公开课

李玫瑾:为什么性格比能力更重要?

无障碍浏览 进入关怀版