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

如何动态获取函数变量?函数参数与变量需一致的代码执行报错排查

解决动态创建变量时的NameError问题,同时保持参数与变量名一致

首先,咱们来拆解下你代码里的问题根源:当循环执行到i='GetA'时,exec(f"{i}=func({i})")会被解析成GetA=func(GetA)——这时候右边的GetA还完全没被创建出来,Python自然会抛出NameError,它找不到这个未定义的变量。

你想要实现的是让函数参数和最终生成的变量名一致,核心其实是要把变量名的字符串本身传给func,而不是试图引用还不存在的变量。下面给你两种可行的解决方案:

方案一:修改exec的字符串,传递字符串参数

直接给func的参数加上引号,让它接收变量名对应的字符串常量,这样就不会出现未定义的问题,同时也能保持参数和变量名一致:

def func(i):
    return i
for i in ['GetA', 'GetB', 'GetC']:
    # 给参数添加引号,将变量名字符串传入func
    exec(f"{i}=func('{i}')")
print(GetA)  # 输出: GetA
print(GetB)  # 输出: GetB
print(GetC)  # 输出: GetC

执行时,exec里的代码会变成GetA=func('GetA'),右边的'GetA'是合法的字符串常量,不存在未定义问题,最终生成的变量值也和变量名完全一致。

方案二:用字典替代exec(更安全的推荐方案)

虽然exec能解决问题,但它的安全性和可读性都不算理想,Python里更规范的做法是用字典来管理这些动态生成的“变量”:

def func(i):
    return i
# 创建字典存储动态生成的结果
result_dict = {}
for i in ['GetA', 'GetB', 'GetC']:
    result_dict[i] = func(i)
# 通过字典键访问对应的“变量”
print(result_dict['GetA'])  # 输出: GetA
print(result_dict['GetB'])  # 输出: GetB
print(result_dict['GetC'])  # 输出: GetC

这种方式避免了直接修改全局/局部命名空间,代码逻辑更清晰,也不会有exec带来的潜在安全风险(比如如果i的内容包含恶意代码时)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 22:39:09