You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask中exec()函数无法正常工作的问题排查

为什么exec修改不了你的局部变量?

你遇到的问题核心在于:在函数(比如Flask的路由函数)内部,直接把locals()传给exec时,对这个字典的修改不会同步回实际的局部变量。

Python对函数内的局部变量有专门的优化机制,locals()返回的只是当前局部变量的一个快照字典,你修改这个字典里的内容,并不会影响真正的局部变量x,所以最后打印的还是初始值0。

解决办法

别用locals(),自己定义一个字典来存要操作的变量,执行完exec后从字典里取结果:

x = 0
# 自定义一个字典存变量
var_dict = {'x': x}
exec("x = 10", globals(), var_dict)
# 从字典里更新x的值
x = var_dict['x']
print(x)  # 现在会输出10

如果不需要区分全局和局部变量,甚至可以直接用一个字典作为执行上下文:

ctx = {'x': 0}
exec("x = 10", ctx)
print(ctx['x'])  # 输出10

⚠️ 重要提醒:在Flask里执行从数据库拉来的代码极度危险,属于典型的代码注入风险,除非你100%信任这个数据源,否则绝对不要这么做。

内容的提问来源于stack exchange,提问作者Olivier Picq

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 04:18:29