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