pyCharm未解析引用语法高亮显示

2024-10-03 19:32:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我在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在使用*导入时解析其函数,但PyDAQmx缺少这个“东西”

有人能指导我理解什么是“某物”以及如何解决它吗


Tags: 方法函数代码from标记importfoopycharm
1条回答
网友
1楼 · 发布于 2024-10-03 19:32:58

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文件中动态定义,以解决客户机的问题

相关问题 更多 >