python - 测试模块中的所有函数是否有错误

标签 python

这可能是一个愚蠢的问题,但无论如何都要大胆前进。

我有一个包含大约十几个 Python 模块的库,我维护这些模块供一般使用。最近,在找到有关 SO 的建议后,我更改了所有模块,以便以 import x as y 样式导入它们,而不是 from x import *。这解决了几个问题并使代码更易于管理。

但是,这有一个意想不到的副作用。许多模块使用 Python 内置模块(例如 sysos)来执行任何操作,以及之前设置代码的方式(如果我输入 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/

相关文章:

python - 如果现有字典在python中看到另一个具有相同键但不同值的项目,我该如何报告错误

python - 无法模拟从另一个类继承的类(创建/使用单例对象)

python - 你能不使用列表向后迭代一个数字吗?

python - python中数据帧的序列长度

python - 在 Django 中,如何使用动态字段查找过滤 QuerySet?

python - 在python中乘以大型稀疏矩阵

python - Django 表单向导重定向

python - 为 Keras 多输入模型发布 tf.data.Dataset

python - 如何使用 Python distutils?

Python 命名参数是关键字?