这是完全有效的代码:
globals().update({"variable": "val"})
variable
# do-something-with-variable
但是,PyCharm无法识别变量:
我不想禁用未解析引用的标记;这是一个非常有用的功能。我希望PyCharm识别我的变量。我怎样才能做到这一点? (即使它是一个肮脏的开发技巧,我将在生产中删除)
我不关心globals()。更新如果不是因为Python的版本3.4的multiprocessing
模块包含通过上下文类动态创建变量而不是在__init__.py
文件中定义它们(参见this link)因此,PyCharm不会完全认识模块的属性,所以我必须不断地查找文档,而不是使用PyCharm的内省功能,更不用说没有得到unresolved reference
错误让我不断怀疑我是否正确获取代码。基本上就像在Windows'记事本中编写代码;-)
由于Python是一种动态语言,因此PyCharm无法使用静态推理检查这是否有效。
考虑以下:
globals = lambda: {}
globals().update({'variable': 'val'})
print(variable) # NameError: name 'variable' is not defined
既然你为globals
蒙上了阴影,那么这不再是有效的代码而PyCharm也无从知晓。
上述可能是动态语言的缺点:在运行程序之前,您无法知道程序是否有效。
您可以在要禁用未解析的参考检查的行上方的行上添加:# noinspection PyUnresolvedReferences
。
它不会在其他任何地方禁用它(从我在Pycharm 2018.2中看到的)