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

Python跨文件调用函数内变量报NameError错误的原因与解决方案

报错原因

  • 核心触发逻辑为Python的if __name__ == '__main__'代码块执行规则:该块内的代码仅在脚本被直接运行时执行,当脚本作为模块被其他文件导入时,块内逻辑完全不生效。
  • 直接运行set.py时,块内的setvar()会被调用,函数内部声明了全局变量x并完成赋值,后续调用getvar()自然可以正常获取值。
  • 当get.py导入set模块时,set.py的主逻辑块不执行,setvar()从未被调用,模块全局作用域下没有创建过x变量,调用getvar()时找不到对应变量就会抛出NameError。

符合需求的修改方案

需求限定不能调用setvar()获取变量,只需直接在set.py的模块全局作用域初始化x即可,无需依赖setvar()的执行来创建变量:
修改后的set.py代码:

# 直接在模块全局作用域定义x,不需要依赖setvar执行创建
x = 100

def setvar():
    global x
    x = 100

def getvar():
    return x

if __name__ == '__main__':
    setvar()
    getvar()

get.py代码无需做任何调整,运行后即可正常输出100,全程不需要调用setvar(),完全符合需求。

补充建议:尽量不要使用set作为自定义模块名,该名称和Python内置的集合类型set重名,可能引发其他隐式冲突,可重命名为var_op.py等自定义名称。

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

相关产品推荐
方舟 Agent Plan

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

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