测试模块中的所有功能是否存在错误

时间:2014-07-21 19:56:04

标签: python

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

我有一个包含大约12个Python模块的库,我维护它们以供一般使用。最近,根据SO上的建议,我更改了所有模块,因此它们以import x as y样式而不是from x import *导入。这解决了几个问题,使代码更易于管理。

然而,这有一个意想不到的副作用。如果我在模块sys中键入os,许多模块使用Python内置模块(如import sysx)来执行任何操作,以及先前设置代码的方式,并在模块from x import *中使用了y,我没有import sys在模块y中。结果,我认为这是理所当然的(可怕的做法,我知道)。当我切换到import x时,这会导致很多破碎的功能,正如你想象的那样。

所以这是主要的问题:因为Python是一种解释型语言,在函数实际运行之前,函数中缺少模块的错误不会显示出来。而且因为这只是一个通用库,所以这些错误中的一些可能会持续数月未检测到或更长时间。

我完全准备为每个模块(if __name__ == "__main__"及其所有)编写单元测试,但我想先问一下:是否有一种自动检查模块中每个函数的方法导入/语法错误,或任何其他不依赖于输入的错误?编译器将用C或其他语言捕获的内容。一个简短的Google和SO搜索没有发现任何事情。任何建议都欢迎和赞赏。

1 个答案:

答案 0 :(得分:2)

是。 PyFlakes会警告您最基本的错误,并且应该确保它与您喜欢的文本编辑器集成,因此它会告诉您保存文件时缺少导入或未使用的导入。

PyFlakes会告诉你其他事情,

  • 语法错误
  • 未定义的名字
  • 缺少进口
  • 未使用的进口

要在目录中的所有文件上运行PyFlakes,您可以这样做:

pyflakes /path/to/dir

PyFlakes比PyLint等更高级的linting工具有一个很大的优势就是它可以进行静态分析 - 这意味着它不需要导入你的代码(如果你有代码,这可能会很痛苦)一些复杂的依赖)。它只是分析Python源代码的抽象语法树,因此可以捕获最基本的错误 - 通常会阻止脚本运行的错误。

我还应该提一下,有一个相关工具flake8,它结合了PyFlakes与PEP8约定检查和McCabe代码复杂性分析。


我知道的每个编辑器(或IDE)都有PyFlakes集成。这里只是一对(没有特别的顺序):