pycharm无法在函数内部引用全局变量

时间:2019-03-09 03:46:44

标签: python pycharm

我在函数中定义了一个全局变量,但是PyCharm无法引用该全局变量。 像这样的代码:

a.py:
g_Handle = None
def Init():
    import mods
    global g_handle
    g_handle = mods.handle_class()

b.py:
import a
a.g_handle 
# PyCharm will reference 'g_handle' as None,
# but I want reference 'g_handle' as mods.handle_class

我尝试为g_handle添加类型,但我不想直接在a.py中导入mod

a.py:
g_handle =None # type: mods.handle_class

但这是行不通的。找不到模组 所以我想知道如何让PyCharm可以将g_handle引用为mods.handle_class。 谢谢。

1 个答案:

答案 0 :(得分:0)

我不确定这是否是您提出问题的方式,但看来您这里有多个问题。第一个是导入引用问题(或可能在类更有效的情况下使用导入)。

请参见,如果仅按照描述和提供的方式运行代码,则将永远无法获得所需的正确答案,因为永远不会调用a.py中的Init函数。

像在代码中一样使用之前,需要在全局范围内以某种方式定义预期的全局变量。

global语句仅告诉解释器在所有状态之间链接提供的变量的值。它不会自行在最外层作用域中定义变量。

因此,类似以下内容(编辑:已修复):

a.py:
g_handle = False
def Init():
    import mods
    global g_handle
    g_handle = mods.handle_class()

b.py:
import a

a.Init()
a.g_handle

...应该可以返回您想要的内容。

如果您可以使用类而不是从其他模块导入,则也可以避免麻烦:

import mods

class a():
    g_handle = False
    global g_handle

    def __init__(self, handle_class):
        g_handle = handle_class()

if __name__ == "__main__":
    a(mods.handle_class).g_handle