Python Rope:如何在所有子模块重构中查找所有丢失的导入和错误

jmu*_*sch 6 python refactoring automated-tests

我正在尝试为每个模块及其子模块查找所有丢失的导入语句和错误。

是否有专门的工具可以用于我正在尝试做的事情?

我写的代码,但看起来真的很糟糕,也许这样的东西已经存在?:

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)
Run Code Online (Sandbox Code Playgroud)

输出:

.[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]
Run Code Online (Sandbox Code Playgroud)

我的项目在重构之前是一团糟但有点有用,现在重构后它坏了。

根据我在 codereview 上的初始帖子中的建议阅读“实用程序员”后:

我一直在挖掘以下源代码:

/usr/local/lib/python2.7/dist-packages/rope

ROPE 的文档似乎有点稀疏。我也一直在使用 Ninja-IDE,但一直无法找到解决我面临的问题的方法。

总的来说,我认为我错过了重构的全部意义。

可以在此处查看当前的父目录布局

在此处输入图片说明

之前的情况相比。

前

任何帮助,填写缺失的术语,或者我什至问什么都会很棒。

解决方案:

pylint -E /path/to/module

jmu*_*sch 6

pip install pylint

将 pylint 指向有问题的文件夹/模块:

pylint /path/to/module > pylint_output

这将创建一个包含全局评估的文件:

  • undefined-variable <-- 这就是我在每个文件中寻找的内容。
  • 无效名称
  • 线太长
  • 多余的括号
  • 坏空白
  • 属性定义的外部初始化
  • 缺少文档字符串
  • 错误的缩进
  • 不良延续
  • 广泛除外
  • 未使用的参数
  • 未使用的进口
  • 未使用的变量
  • 非自用
  • 非会员
  • 整我
  • 不必要的通过
  • 多语句
  • 太多的语句
  • 重复码
  • 当地人太多
  • 缺少最终换行符
  • 太多实例属性
  • 分支太多
  • 重新定义的内置
  • 太多公共方法
  • 语法错误
  • 相对进口
  • 也许没有会员
  • 导入错误
  • 超老班
  • 光秃秃的
  • 未定义的循环变量
  • 太多的返回语句
  • 争论太多
  • 公共方法太少
  • 星形参数
  • 重新进口
  • 索引异常
  • 遥不可及
  • 太多行
  • 重新定义的外部名称
  • 旧级房产
  • 无意义的字符串语句
  • 无意义的陈述
  • 老式班
  • 模块内无名称
  • 全局变量未定义
  • 表达式未赋值
  • 错误除外顺序
  • 从无分配

我的问题的有趣和直接答案是,在 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)    
Run Code Online (Sandbox Code Playgroud)
  • [R] 对“良好实践”指标违规的影响
  • [C]违反编码标准的公约
  • [警告] 文体问题或小程序问题
  • [E] 重要编程问题的错误(即很可能是错误)
  • [F] atal 用于阻止进一步处理的错误

因此,在我的大多数情况下,问题类型 (undefined-variable) 表示尚未导入的模块。pylint -E /path/to/module将只返回未定义的变量错误。