导入其他脚本函数时使用当前对象出现Python NameError问题求助
问题本质
a.py中test函数里的global i,指的是**a.py模块自身的全局变量**,不是导入该函数的b.py里的变量。你在b.py定义的i只属于b.py的作用域,a.py模块中并没有定义i,所以调用test()时会触发NameError。
解决方法
方法1:用参数传递(推荐)
这是最符合Python编程规范的写法,彻底避免全局变量的依赖:
修改a.py:
# a.py def test(i): print(f'The number is {i}')
修改b.py:
# b.py from a import test i = 22 test(i)
方法2:直接修改a模块的全局变量
如果你一定要用全局变量,可以直接操作a模块的命名空间:
修改b.py:
# b.py import a a.i = 22 a.test()
这样test函数就能找到a.py模块中被赋值的i了。
方法3:预先初始化模块全局变量
先在a.py里定义好i,再通过模块引用修改:
修改a.py:
# a.py i = 0 # 预先初始化全局变量 def test(): global i print(f'The number is {i}')
修改b.py:
# b.py import a a.i = 22 a.test()
内容的提问来源于stack exchange,提问作者Alien
相关产品推荐
相关产品推荐

