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

如何不使用全局作用域向exec传值并从中获取变量值

解决方案

Python 的 exec 内置函数原生支持传入两个自定义字典参数,分别作为代码执行时的全局作用域和局部作用域,通过这两个参数就能完全控制 exec 可访问的所有变量,彻底隔离外部全局作用域。

实现代码

a = 100
b = 200

snip = '''
c = a+b
'''

# 自定义作用域字典,提前传入需要暴露给exec的变量
exec_scope = {
    'a': a,
    'b': b
}

# 将自定义字典同时作为全局、局部作用域传入,完全隔离外部环境
exec(snip, exec_scope, exec_scope)

# 从自定义字典中读取exec执行后生成的变量
c = exec_scope['c']
print(c)

核心说明

  • 不需要传入当前环境的 globals() 或 locals(),所有允许 exec 访问的变量都提前写入自定义字典即可,exec 无法读取外部全局作用域的其他变量,不会造成变量污染。
  • exec 执行过程中新增、修改的所有变量都会同步到传入的自定义字典中,执行结束后直接从字典取值即可获取执行结果。
  • 如果需要进一步限制 exec 的执行权限,可以自定义内置方法暴露范围,比如仅允许使用指定内置函数:
# 限制exec只能调用int、str两个内置方法,完全屏蔽其他内置能力
safe_exec_scope = {
    '__builtins__': {'int': int, 'str': str},
    'a': 100,
    'b': 200
}
exec('c = a + b', safe_exec_scope, safe_exec_scope)
print(safe_exec_scope['c'])

内容的提问来源于stack exchange,提问作者Daniel Warfield

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 09:24:02