【问题标题】:Python Rope: How to Find all missing imports and errors in all sub modules refactoringPython Rope:如何在所有子模块重构中查找所有缺失的导入和错误
【发布时间】:2014-05-14 02:42:13
【问题描述】:

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

是否有专门的工具来处理我正在尝试做的事情?

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

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.

before. 相比

任何关于填写缺失术语的帮助,或者关于我什至要求的任何帮助都会很棒。

解决方案:

pylint -E /path/to/module

【问题讨论】:

    标签: python refactoring automated-tests


    【解决方案1】:

    pip install pylint

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

    pylint /path/to/module > pylint_output

    /path/to/module 是您有兴趣查看的 python 模块的位置。

    例如:

    my_project
       |____  moduleA
                 |____  __init__.py
                 |____  A.py
       |____  moduleB
                 |____  __init__.py
                 |____  B.py
    
    • ./my_project/moduleA
    • ./my_project/moduleB

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

    • undefined-variable
    • 无效名称
    • 行太长
    • 多余的括号
    • 错误的空白
    • 属性定义的外部初始化
    • 缺少文档字符串
    • 缩进错误
    • 糟糕的继续
    • 广泛除外
    • 未使用的参数
    • 未使用的导入
    • 未使用的变量
    • 不可自用
    • 无会员
    • 修复我
    • 不必要的通行证
    • 多语句
    • 陈述过多
    • 重复代码
    • 本地人太多
    • 缺少最终换行符
    • 实例属性过多
    • 分支太多
    • 重新定义内置
    • 公共方法太多
    • 语法错误
    • 相对导入
    • 也许没有成员
    • 导入错误
    • 超旧类
    • 除此之外
    • 未定义循环变量
    • 返回语句过多
    • 参数太多
    • 公共方法太少
    • star-args
    • 重新导入
    • 索引异常
    • 无法访问
    • 行数过多
    • 重新定义的外部名称
    • 旧类属性
    • 无意义的字符串语句
    • 毫无意义的陈述
    • 老式类
    • 模块中没有名称
    • 全局变量未定义
    • 表达式未赋值
    • 除顺序错误
    • 无赋值

    有趣且对我的问题的直接回答是,在 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)    
    
    • [R] 违反“良好实践”指标的因素
    • [C]违反编码标准的约定
    • [W]针对风格问题或轻微编程问题的警告
    • [E]重要编程问题的错误(即很可能是错误)
    • [F]atal 用于阻止进一步处理的错误

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

    【讨论】:

    • /path/to/module 在哪里?
    • @alper 这将是您要检查的 python 模块。我会更新我的答案。让我知道这个答案是否仍然有效。
    • 是的,先生,它有效。我只是困惑我必须使用节点模式才能使pylint 工作。
    猜你喜欢
    • 2010-10-29
    • 2011-03-22
    • 2013-02-02
    • 2017-08-24
    • 2015-06-10
    • 1970-01-01
    • 2021-11-25
    • 2012-05-28
    • 2013-05-27
    相关资源
    最近更新 更多