pyflakes 在动态加载的 python 模块上,不使用“NOQA”?

问题描述 投票:0回答:0

更新我修复了对术语“PYQA”的错误使用,并将其更改为正确的“NOQA”。

我们在linux下运行,正在使用

python 3.7
.

我们有一个已经使用多年的大型代码库,我们最近开始使用

pyflakes
来帮助进行代码验证。它在大多数情况下运行良好。然而……

我们的 python 模块的一个子集通过读取 python 文件动态加载,编译它以获得代码对象,然后执行该代码对象。总的来说,这对我们来说一直很有效,但现在我们的

pyflakes
测试出现了问题。

以下是这些动态可加载模块之一的非常简化的示例。假设它被命名为

dynmod.py
...

# Note that `GenericClass` and `utility_function()` are already
# defined within the python module which dynamically loads this
# `dynmod.py` module.
class LocalClass(GenericClass):
    def __init__(self, a, b, c):
        self.extravar0 = 0
        self.extravar1 = 1
        super().__init__(a, b, c)
    def extramethod(self):
        utility_function(self.extravar0, self.extravar1)

问题是,当我针对

pyflakes
运行
dynmod.py
时,它将
GenericClass
utility_function
标记为
undefined name
。我知道这是正确的
pyflakes
行为,因为
pyflakes
没有看到这些项目的任何定义。

但是,我正在寻找一种方法来覆盖这些特定类型问题的错误without在包含加载程序模块中定义的这些对象或变量之一的每一行上使用

NOQA
标签.这是因为有几十个这样的动态加载模块和几十个来自 loader 模块的对象被 python 模块引用,并且这些动态加载模块中的一些非常大并且有很多对那些在中定义的项目的引用加载器模块。

而且我们仍然希望

pyflakes
捕获其他可能出现在这些动态加载模块中的有效未定义变量引用。

不是通过

pyflakes
标签逐行禁用
NOQA
验证,有没有办法告诉它如下所示的内容?
"Please do not flag the following items as 'undefined': 'GenericClass', 'utility_function'"
?

如果没有,谁能建议另一种方法来识别动态加载的 python 模块中的未定义变量,该方法忽略加载动态模块的模块中定义的变量的错误?

需要明确的是,我们不想禁用all

undefined name
错误......只有那些引用了确实在加载模块中定义的项目。

非常感谢您。

undefined-symbol dynamic-loading pyflakes
© www.soinside.com 2019 - 2024. All rights reserved.