Python调用导入模块的函数后获取其内部变量报NameError如何解决
报错原因
- 你代码中的
global x仅声明当前test函数内使用的x是funcA.py模块内部的全局变量,不会自动同步到导入该模块的main.py作用域中 - 你全程没有给
x赋过初始值,哪怕是在funcA模块内部,调用test()时试图读取的全局x从始至终没有被定义,自然会触发NameError
修复方案
根据你的使用场景可以选以下两种改法:
方案1:定义funcA模块全局变量,按需导入
先给funcA.py里的x补初始值:
# 先声明模块全局变量x x = 0 def test(): global x # 如果需要修改x的值可以在这里赋值,比如x = 2 y = 2 return x
main.py可以直接导入使用:
from funcA import * test() print(x)
小提示:Python中
from xx import *导入整数、字符串等不可变类型的模块变量时是值拷贝,后续原模块修改该变量不会同步到当前文件的导入值。如果需要实时同步,建议改用import funcA,调用时写funcA.x、funcA.test()即可。
方案2:避免用全局变量,直接接收函数返回值
如果不需要跨作用域共享x,直接把需要的值通过return返回即可,写法更安全:
funcA.py修改为:
def test(): x = 2 y = 2 return x
main.py修改为:
from funcA import * x = test() print(x)
内容的提问来源于stack exchange,提问作者user17175520
相关产品推荐
相关产品推荐

