eval() 执行表达式
最后更新:2026-09-22
eval() 执行表达式
eval() 执行字符串中的 Python 表达式,返回结果。**安全警告**:不要用 eval 处理不可信输入。
| 分类 | 内置函数 |
|---|---|
| 类型 | 内置函数 |
| Python 版本 | all |
📝 语法
eval(expression[, globals[, locals]])
⚙️ 参数
| expression 必选 | Python 表达式字符串(或 code 对象)。 |
|---|---|
| globals 可选 | 全局命名空间字典。(默认值:None) |
| locals 可选 | 局部命名空间字典。(默认值:None) |
返回值:表达式求值的结果(类型取决于表达式本身)。
💥 异常
SyntaxError— 当表达式语法错误时抛出。NameError— 当表达式引用了未定义的名字时抛出。TypeError— 当 globals / locals 不是字典时抛出。
▶ 示例
编辑下方代码,点击运行,在输出面板查看结果:
运行结果:
15
1024
⚠️ 警告 eval 可执行任意代码,生产环境请用 ast.literal_eval 替代。
🏷️ 相关内置函数
💡 相关案例
更多实战案例即将上线,敬请期待。
❓ 常见问题
Qeval() 和 exec() 有什么区别?
Aeval() 只执行单个表达式并返回结果(如 eval('1 + 2') 返回 3);exec() 执行语句/代码块(if、for、def 等),返回 None。
Qeval('x = 1') 会怎样?
A抛 SyntaxError。赋值是语句不是表达式,eval() 只能求值表达式;想执行语句用 exec()。
Q为什么不能用 eval 处理用户输入?
Aeval() 能执行任意代码,如 eval("__import__('os').system('dir')") 这类字符串;解析用户输入请用 ast.literal_eval,它只处理字面量。
Qeval 里能用外部定义的变量吗?
A默认可以(使用当前全局/局部命名空间);也可通过 globals/locals 参数传入自定义命名空间,限制表达式能访问的名字。