pyCharm 未解析的引用语法突出显示



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

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

由于我对python很陌生,我想了解问题来自哪里。

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

from PyDAQmx import *

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

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

PyCharm将此引用标记为红色,并显示消息"未解析的引用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在使用*导入时解析它的函数,但PyDAQmx缺少这个"东西">

有人可以指导我了解这个"东西"是什么以及如何解决它吗?

PyDAQmx

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

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

我能够通过手动将DAQmxCreateTask添加到PyDAQmx.__all__并更新 PyCharm 骨架来"修复"未解析的引用。不使用from PyDAQmx import *可以方便地为您解决问题,也是最佳实践。

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

最新更新