PyCharm无法解析多处​​理模块的动态引用

时间:2018-09-04 13:34:43

标签: python pycharm

这是完全有效的代码:

globals().update({"variable": "val"})
variable
# do-something-with-variable

但是,PyCharm无法识别该变量:

enter image description here

我不想禁用未解析引用的标记;这是一个非常有用的功能。我希望PyCharm能够识别我的变量。我怎样才能做到这一点? (即使这是一个肮脏的开发技巧,以后我也会在生产中删除它)

说明

如果不是针对那个版本的 Python的multiprocessing模块(版本3.4)通过上下文类动态创建变量,而不是在其中定义它们,我将不在乎globals()。update。 __init__.py文件(请参阅this link)由于这个原因,PyCharm 根本无法识别模块的属性,因此我必须不断查找文档,而不要使用PyCharm对此软件包的内省功能,更不用说没有遇到unresolved reference错误了,这使我不断怀疑自己是否正确编写了代码。基本上就像在Windows的记事本中编写代码;-)

2 个答案:

答案 0 :(得分:3)

由于Python是一种动态语言,因此PyCharm无法使用静态推断来检查它是否有效。

请考虑以下内容:

globals = lambda: {}

globals().update({'variable': 'val'})

print(variable) # NameError: name 'variable' is not defined

现在您已经给globals蒙上了一层阴影,这不再是有效的代码,PyCharm无法知道。

以上可能是动态语言的缺点:在运行程序之前,您不知道程序是否有效。

答案 1 :(得分:2)

您可以在希望禁用未解决的参考检查的行上方的行中添加:# noinspection PyUnresolvedReferences

它不会在其他任何地方禁用它(根据我在Pycharm 2018.2中看到的内容)