У меня есть эта проблема с глобальными переменными. После того, как я явно присвоил некоторое значение глобальной переменной в одном модуле, я попытался получить доступ к этой глобальной переменной в функции из другого модуля. Он не содержит 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
Может кто-нибудь объяснить, почему глобальная переменная из другого модуля нет, и как я могу решить эту проблему? Заранее спасибо.