gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 04:08:07 28 4
gpt4 key购买 nike

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

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

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

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

from PyDAQmx import *

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

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

PyCharm 将此引用标记为红色,消息为“未解析的引用 DAQmxCreateTask”

如果我这样做

from PyDAQmx import DAQmxCreateTask, DAQmxStartTask

或者我这样做:

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

然后 Unresolved 引用消失了,所以我实际上有这两种方法来解决我的问题,但我想了解为什么会这样。

我已经尝试过“使缓存无效并重新启动”的 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() 来动态定义这些函数dict (来自文件 '/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 动态定义的一组手动符号文件来为客户解决问题。

关于python - pyCharm 未解析的引用语法突出显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56870149/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com