我对全局变量有这个问题。在为一个模块中的全局变量显式分配了一些值之后,我尝试从另一个模块访问函数中的此全局变量。即使它已经分配了值,它也不包含任何内容。这是下面的代码,证明了我的观点:
a.py(主文件)
import b
fname = None
def get_file(fn):
try:
global fname
fname = fn
f = open(fn)
except FileNotFoundError:
import sys
sys.exit(1)
finally:
return f
def fun(f):
x = b.Foo(f)
assert fname is not None
x.do_shit()
if __name__ == "__main__":
fn = "FILE"
f = get_file(fn)
fun(f)
f.close()
b.py
class Foo:
def __init__(self, thing):
self.thing = thing
def do_shit(self):
import a
assert a.fname is not None
注意:运行a.py之前,请先创建一个名为“ FILE”的文件(无扩展名)
运行a.py时,得到以下输出:
Traceback (most recent call last):
File "a.py", line 24, in <module>
fun(f)
File "a.py", line 19, in fun
x.do_shit()
File "F:\Peep\b.py", line 7, in do_shit
assert a.fname is not None
AssertionError
谁能解释为什么另一个模块的全局变量为None,我该如何解决这个问题?预先谢谢你。