我试图找到每个模块及其子模块的所有缺少的import语句和错误。
我正在尝试做什么专用工具?
我写的代码,但看起来非常糟糕,也许这样的东西已经存在了?:
import os
def find_missing_imports(walk):
for items in walk:
d = items[0]
f_list = items[1]
for f in f_list:
module = f[:-3]
# posix_path
module_path = d.lstrip('.').replace('/','.').lstrip('.')
try:
__import__(module_path, fromlist=[module])
except IndentationError, e:
#print(f,e)
pass
except NameError, e:
print(d,f,e)
pass
except Exception, e:
print(f,e)
pass
walk = [[root,files] for root,dirs,files in os.walk('.') for fn in files if fn.endswith('.py')]
find_missing_imports(walk)
输出:
.[snip]
('./Sky_Group_Inventory_Scanner-wxpython/display_image/Dialogs', 'ImageSelectionFrame.py', NameError("name 'wx' is not defined",))
('./Sky_Group_Inventory_Scanner-wxpython/display_image/Dialogs', 'ItemSpecificsDialog.py', NameError("name 'wx' is not defined",))
('./Sky_Group_Inventory_Scanner-wxpython/display_image/Dialogs', 'ReturnCorrectWatchTitle.py', NameError("name 'wx' is not defined",))
.[snip]
我的重构之前的项目是一团糟但很有用,现在它在重构之后就已经破了。
阅读'实用程序员'根据我在codereview上的帖子提出的建议:
我一直在寻找源代码:
/usr/local/lib/python2.7/dist-packages/rope
ROPE的文档似乎有点稀疏。我也一直在使用Ninja-IDE,但我们无法找到解决我面临的问题的解决方案。
总的来说,我认为我错过了重构的全部内容。
可以看到当前的父目录布局here.
相比
任何帮助,填写缺少的术语,或者我甚至要求的都会很棒。
pylint -E /path/to/module
答案 0 :(得分:4)
pip install pylint
将pylint指向有问题的文件夹/模块:
pylint /path/to/module > pylint_output
这将创建一个包含全局评估的文件:
我感兴趣并直接回答我的问题是在pylint结果中会有一些具有这种布局的行:
************* Module module_name.sub_module.class_name.method_name
R: line_no, column: Issue description 'some_name' (issue-type)
C: line_no, column: Issue description 'some_name' (issue-type)
W: line_no, column: Issue description 'some_name' (issue-type)
E: line_no, column: Issue description 'some_name' (issue-type)
F: line_no, column: Issue description 'some_name' (issue-type)
************* Module module_name.sub_module.class_name.method_name
R: line_no, column: Issue description 'some_name' (issue-type)
C: line_no, column: Issue description 'some_name' (issue-type)
W: line_no, column: Issue description 'some_name' (issue-type)
E: line_no, column: Issue description 'some_name' (issue-type)
F: line_no, column: Issue description 'some_name' (issue-type)
因此,在我的大多数情况下,问题类型的(未定义变量)表示尚未导入的模块。 pylint -E /path/to/module
将仅返回未定义变量的错误。