Python3跨文件调用变量出现NameError报错问题求解决方案
报错原因
Python中每个模块都有独立的全局命名空间,全局变量的作用域仅限所属模块内部,不会跨模块共享:
- 你在file1中定义的
food属于file1的全局命名空间,而eat函数定义在file2中,运行时只会查找file2自己的全局命名空间里的food,自然找不到对应变量。 - 你在file1顶层写的
global food没有任何作用,global关键字仅用于在函数内部声明要修改的是外部全局变量,在模块顶层写不会产生任何额外效果。 from file2 import *只是把file2的内容导入到file1的命名空间,不会反过来把file1的变量同步到file2的命名空间,因此file2完全感知不到file1里定义的food。
可行解决方案
以下方案都符合你拆分代码、简化主文件的需求:
- 方案1:将变量作为参数传入函数(最推荐,耦合度最低,符合函数封装规范)
修改file2.py的eat函数,增加入参:
def eat(food): print("I want to eat some", food)
修改file1.py,调用时传入参数:
from file2 import eat food = "pizza" eat(food)
- 方案2:直接给file2模块的全局变量赋值
不需要修改file2.py的原有逻辑,只需调整file1.py的导入和赋值逻辑:
import file2 # 直接修改file2模块全局命名空间的food变量 file2.food = "pizza" file2.eat()
- 方案3:公共变量存入独立配置模块(适合多公共变量的场景)
新增专门存公共变量的config.py,所有模块统一从这里读写公共变量,方便统一管理:
config.py内容:
food = ""
file2.py内容:
import config def eat(): print("I want to eat some", config.food)
file1.py内容:
import config from file2 import eat config.food = "pizza" eat()
内容的提问来源于stack exchange,提问作者TG Imagine
相关产品推荐
相关产品推荐

