pyCharm未解析的参考语法突出显示

时间:2019-07-03 12:26:30

标签: python import pycharm

我在pyCharm中有一个“假”未解析的引用。

我说“ false”是因为引用实际上可以执行,我的代码可以正常工作,所以我认为这更多是pyCharm问题,无法解析引用并将其标记为红色。

由于我是python的新手,所以我想了解问题的出处。

基本上在我正在处理的代码中,有一个

from PyDAQmx import *

然后在我的代码中,我使用了该库的一些函数/方法/常量。

DAQmxCreateTask(...)
DAQmxStartTask(...)

PyCharm用消息``Unresolved reference DAQmxCreateTask`

标记为红色。

如果我这样做

from PyDAQmx import DAQmxCreateTask, DAQmxStartTask

或者我这样做:

import PyDAQmx as PyDAQmx   
PyDAQmx.DAQmxCreateTask(...)

然后未解决的参考消失了,所以实际上我有两种解决问题的方法,但是我想了解为什么会发生。

我已经尝试了“使缓存无效并重新启动”的pyCharm选项,但没有成功。

据我了解,如果您执行from foo import *,则foo内部的所有函数都应被解析和可调用。

示例。

>> linspace(0,10,3)
Unresolved reference linspace

>> from numpy import *
>> linspace(0,10,3)
array([ 0.,  5., 10.])

因此,这意味着numpy具有“某些东西”,当使用*导入时,pycharm可以解析pycharm的功能,但PyDAQmx缺少此“东西”

有人可以指导我理解“东西”是什么以及如何解决吗?

1 个答案:

答案 0 :(得分:1)

PyDAQmx通过将它们添加到globals()字典(来自文件'/Applications/National Instruments/NI-DAQmx Base/includes/NIDAQmxBase.h')来动态定义这些功能,因此我猜想PyCharm对第三方库的静态代码分析可以因此,无法识别DAQmxCreateTask

您可以在__all__库的PyDAQmx的动态定义中看到这一点,而numpy则不这样做。 __all__限制from <thing> import *语句后可用的符号。

我可以通过手动将DAQmxCreateTask添加到PyDAQmx.__all__并更新PyCharm框架来“修复”未解决的引用。不使用from PyDAQmx import *可以方便地为您解决问题,也是最佳做法。

作为库的客户端,在运行时进行这种动态函数创建时,您实际上不需要修复任何东西,但是从理论上讲,库维护者可以将__all__设置为他们期望的手动符号集从该NIDAQmxBase.h文件动态定义,以解决客户端问题。