Python глобальная переменная отсутствует в другом модуле - PullRequest
0 голосов
/ 03 февраля 2020

У меня есть эта проблема с глобальными переменными. После того, как я явно присвоил некоторое значение глобальной переменной в одном модуле, я попытался получить доступ к этой глобальной переменной в функции из другого модуля. Он не содержит None, даже если ему уже присвоено значение. Ниже приведен код, который демонстрирует мою точку зрения:

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

Может кто-нибудь объяснить, почему глобальная переменная из другого модуля нет, и как я могу решить эту проблему? Заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...