Python全局变量在另一个模块中为None

时间:2020-02-03 07:32:01

标签: python global-variables

我对全局变量有这个问题。在为一个模块中的全局变量显式分配了一些值之后,我尝试从另一个模块访问函数中的此全局变量。即使它已经分配了值,它也不包含任何内容。这是下面的代码,证明了我的观点:

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,我该如何解决这个问题?预先谢谢你。

0 个答案:

没有答案