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
相关产品推荐
相关产品推荐

