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

pyflakes on dynamically loaded python modules, without using "NOQA"?

提问人:HippoMan 提问时间:4/7/2023 最后编辑:HippoMan 更新时间:4/7/2023 访问量:52

问:

更新我修复了对术语“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)

问题是,当我对 ,它会标记 和 作为 .我知道这是正确的行为,因为没有看到这些项目的任何定义。pyflakesdynmod.pyGenericClassutility_functionundefined namepyflakespyflakes

但是,我正在寻找一种方法来覆盖这些特定类型问题的错误,而无需在包含加载器模块中定义的这些对象或变量之一的每一行上使用标签。这是因为有几十个这些动态加载的模块和几十个来自 loader 模块的对象是从 python 模块引用的,其中一些动态加载的模块非常大,并且对 loader 模块中定义的那些项目有很多引用。NOQA

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

有没有办法告诉它如下内容,而不是通过标记逐行禁用验证? ?pyflakesNOQA"Please do not flag the following items as 'undefined': 'GenericClass', 'utility_function'"

如果没有,任何人都可以建议另一种方法来识别动态加载的 python 模块中未定义的变量,该方法会忽略加载动态模块的模块中定义的变量的错误?

需要明确的是,我们不想禁用所有错误......仅引用加载模块中确实定义的项的那些。undefined name

提前非常感谢你。

未定义符号 动态加载 pyflakes

评论


答: 暂无答案