Python 测试模块中的所有函数是否存在错误
这可能是一个愚蠢的问题,但无论如何都要大胆向前冲 我有一个包含十几个Python模块的库,我维护这些模块以供一般使用。最近,在这里找到关于SO的建议后,我更改了所有模块,使它们以Python 测试模块中的所有函数是否存在错误,python,Python,这可能是一个愚蠢的问题,但无论如何都要大胆向前冲 我有一个包含十几个Python模块的库,我维护这些模块以供一般使用。最近,在这里找到关于SO的建议后,我更改了所有模块,使它们以import x as y样式导入,而不是from x import*。这解决了几个问题,使代码更易于管理 然而,这有一个意想不到的副作用。许多模块都使用Python内置模块,如sys或os来执行任何操作,并且按照以前设置代码的方式,如果我在模块x中键入import sys,并在模块y中使用从x导入*,我就不必在模块y中
import x as y
样式导入,而不是from x import*
。这解决了几个问题,使代码更易于管理
然而,这有一个意想不到的副作用。许多模块都使用Python内置模块,如sys
或os
来执行任何操作,并且按照以前设置代码的方式,如果我在模块x
中键入import sys
,并在模块y
中使用从x导入*
,我就不必在模块y
中导入sys。因此,我认为这是理所当然的(我知道,这是一种糟糕的做法)。当我切换到import x
时,正如您可以想象的那样,这导致了大量函数中断
所以这里有一个主要问题:因为Python是一种解释语言,所以函数中缺少模块的错误在函数实际运行之前不会出现。由于这只是一个通用库,其中一些错误可能会持续数月而未被发现,甚至更长时间
我完全准备好为每个模块编写一个单元测试(if\uuuuu name\uuuu==“\uuuu main\uuuu”
等等),但我想首先问:是否有一种自动方法来检查模块中的每个函数的导入/语法错误,或者不依赖于输入的任何其他错误?编译器将用C或其他语言捕获的内容。一个简短的谷歌搜索没有发现任何东西。欢迎提出任何建议,我们将不胜感激。是的。将警告您这些最基本的错误,并且您应该确保它与您最喜爱的文本编辑器集成,以便在保存文件时告诉您缺少导入或未使用的导入
PyFlakes会告诉你关于
- 语法错误
- 未定义的名称
- 缺少进口
- 未使用的进口
pyflakes /path/to/dir
PyFlakes与更高级的linting工具(如PyLint
)相比有一个很大的优势,那就是它可以进行静态分析,这意味着它不需要导入您的代码(如果您有一些复杂的依赖项,这可能会很痛苦)。它只分析Python源代码的抽象语法树,因此捕获最基本的错误,这些错误通常会阻止脚本运行
我还应该提到一个相关的工具,它将PyFlakes与约定检查和McCabe代码复杂性分析相结合
我知道的每个编辑器(或IDE)都有PyFlakes集成。这里有几个(没有特别的顺序):
PyFlakes
,您不需要一个完整的IDE-它非常简单,可以轻松地与我所知道的任何文本编辑器集成。我们使用的是专有文本编辑器,所以我不知道它是否可以集成。我当然可以尝试,但我的权限不是我想要的。我会考虑添加它。谢谢此外,简单文本编辑器(vim、sublime、text mate)是我每天在Python项目中使用的工具,即使是具有巨大框架和数百万LoC的项目。实际上,我建议不要在Python开发中使用大型IDE。