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

为v0至v18赋值时触发NameError错误,求技术解决方法

问题解决:NameError: name 'v0' is not defined

错误原因

你的代码使用eval(f"v{i}")检查变量值,但如果某个变量(比如v0)未被定义,eval会直接抛出NameError——它无法找到对应的变量名,而非返回空字符串。

解决方案

不要用eval,改用作用域字典(locals()或globals())安全检查变量是否存在及值是否为空。以下是修正后的代码:

写法1:分步处理

# 生成需要处理的参数名列表
param_names = [f"v{i}" for i in range(19)]
# 构建参数字典:未定义或为空的参数赋值为None
params = {}
for name in param_names:
    # 检查变量是否存在,或存在但为空字符串
    if name not in locals() or locals()[name] == "":
        params[name] = None
    else:
        params[name] = locals()[name]
# 覆盖v5的指定值
params["v5"] = "test"
# 调用方法
sx.set_attribute(**params)

写法2:字典推导式简化

# 先构建基础参数字典
base_params = {
    f"v{i}": None 
    for i in range(19) 
    if f"v{i}" not in locals() or locals()[f"v{i}"] == ""
}
# 覆盖v5的值,再调用方法
sx.set_attribute(**base_params, v5="test")

注:如果v5原本需要被设为None,这里的覆盖会强制将其设为"test",符合你的需求。

补充说明

  • 若这些变量是全局变量,将locals()替换为globals()即可。
  • 避免用eval处理变量名,它不仅易引发错误,还存在安全风险(若变量名来自不可信输入)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 11:48:21