Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 测试模块中的所有函数是否存在错误_Python - Fatal编程技术网

Python 测试模块中的所有函数是否存在错误

Python 测试模块中的所有函数是否存在错误,python,Python,这可能是一个愚蠢的问题,但无论如何都要大胆向前冲 我有一个包含十几个Python模块的库,我维护这些模块以供一般使用。最近,在这里找到关于SO的建议后,我更改了所有模块,使它们以import x as y样式导入,而不是from x import*。这解决了几个问题,使代码更易于管理 然而,这有一个意想不到的副作用。许多模块都使用Python内置模块,如sys或os来执行任何操作,并且按照以前设置代码的方式,如果我在模块x中键入import sys,并在模块y中使用从x导入*,我就不必在模块y中

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

我有一个包含十几个Python模块的库,我维护这些模块以供一般使用。最近,在这里找到关于SO的建议后,我更改了所有模块,使它们以
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,只需执行以下操作:

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

我还应该提到一个相关的工具,它将PyFlakes与约定检查和McCabe代码复杂性分析相结合


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


它怎么可能知道你要键入什么。它只知道语法错误和运行时错误。由开发人员和单元测试来测试函数是否真正按预期运行。@我想到的是Cyber well语法错误。如果我给一个变量取了一个错误的名字,我不希望地球上的任何编译器都能明白这一点。当然,当你试图运行这个程序时,你的IDE已经捕捉到了语法错误。你用的是什么IDE?@Cyber现在我用的是一个非常基本的文本编辑器。我们的系统设置方式是访问它们的最简单方式。我可以使用IDE来编辑东西,但随后我必须不断地将文件传输到存储它们的主机。我需要研究一个更好的设置,看起来这将是一个只有合适的IDE才能做到的事情,所以我将沿着这条路线走。谢谢实际上,我试图提出几乎相反的观点:-)利用
PyFlakes
,您不需要一个完整的IDE-它非常简单,可以轻松地与我所知道的任何文本编辑器集成。我们使用的是专有文本编辑器,所以我不知道它是否可以集成。我当然可以尝试,但我的权限不是我想要的。我会考虑添加它。谢谢此外,简单文本编辑器(vim、sublime、text mate)是我每天在Python项目中使用的工具,即使是具有巨大框架和数百万LoC的项目。实际上,我建议不要在Python开发中使用大型IDE。