这可能是一个愚蠢的问题,但无论如何都要大胆前进。
我有一个包含大约十几个 Python 模块的库,我维护这些模块供一般使用。最近,在找到有关 SO 的建议后,我更改了所有模块,以便以 import x as y
样式导入它们,而不是 from x import *
。这解决了几个问题并使代码更易于管理。
但是,这有一个意想不到的副作用。许多模块使用 Python 内置模块(例如 sys
或 os
)来执行任何操作,以及之前设置代码的方式(如果我输入 import sys
) code> 在模块 x
中,并在模块 y
中使用 from x import *
,我不需要 import sys
code> 在模块 y
中。结果,我认为这是理所当然的(我知道这是可怕的做法)。当我切换到 import x
时,这导致了很多功能损坏,正如您可以想象的那样。
所以这是主要问题:因为Python是一种解释性语言,所以在函数实际运行之前,有关函数中缺少模块的错误不会显示。由于这只是一个通用库,因此其中一些错误可能会持续数月而不被发现,甚至更长时间。
我完全准备好为每个模块编写单元测试(if __name__ == "__main__"
等等),但我想先问:是否有一个自动化的测试检查模块中每个函数是否存在导入/语法错误或任何其他不依赖于输入的错误的方法?编译器会在 C 或其他语言中捕获的内容。简短的谷歌和SO搜索没有发现任何东西。欢迎并赞赏任何建议。
最佳答案
是的。 PyFlakes
会警告您这些最基本的错误,您应该确保它与您最喜欢的文本编辑器集成,这样每当您保存文件时它都会告诉您缺少导入或未使用的导入。
除其他事项外,PyFlakes 还会告诉您
- 语法错误
- 未定义的名称
- 缺少导入
- 未使用的导入
要对目录中的所有文件运行 PyFlakes,您可以执行以下操作:
pyflakes /path/to/dir
与 PyLint
等更高级的 linting 工具相比,PyFlakes 的一大优势是它可以进行静态分析 - 这意味着它不需要导入您的代码(如果您这样做,这可能会很痛苦)有一些复杂的依赖关系)。它只是分析 Python 源代码的抽象语法树,因此捕获最基本的错误 - 那些通常会阻止脚本运行的错误。
我还应该提到有一个相关的工具,flake8
,它将 PyFlakes 与 PEP8 结合起来约定检查和 McCabe 代码复杂性分析。
我知道的每个编辑器(或 IDE)都有 PyFlakes 集成。这里只是几个(排名不分先后):
关于python - 测试模块中的所有函数是否有错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24873584/