我正在尝试为每个模块及其子模块查找所有缺少的导入语句和错误.
是否有专门的工具来处理我正在尝试做的事情?
我写的代码,但看起来真的很糟糕,也许这样的东西已经存在了?:
导入操作系统def find_missing_imports(步行):对于步行项目:d = 项目[0]f_list = 项目[1]对于 f_list 中的 f:模块 = f[:-3]#posix_pathmodule_path = d.lstrip('.').replace('/','.').lstrip('.')尝试:__import__(module_path, fromlist=[module])除了 IndentationError,e:#打印(f,e)经过除了 NameError,e:打印(d,f,e)经过除了例外,e:打印(f,e)经过walk = [[root,files] for root,dirs,files in os.walk('.') for fn in files if fn.endswith('.py')]find_missing_imports(步行)输出:
.[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",)).[剪辑]我在重构之前的项目是一团糟但有点用处,现在它在重构之后就坏了.
根据我在 codereview 上的最初帖子中的建议阅读实用程序员"后:
任何关于填写缺失术语的帮助,或者关于我什至要求的任何帮助都会很棒.
pylint -E/path/to/module
pip install pylint
将 pylint 指向有问题的文件夹/模块:
pylint/path/to/module >pylint_output
/path/to/module 是您有兴趣查看的 python 模块的位置.
例如:
我的项目|____ 模块A|____ __init__.py|____ A.py|____ 模块B|____ __init__.py|____ B.py./my_project/moduleA./my_project/moduleB这将创建一个包含全局评估的文件:
有趣且对我的问题的直接回答是,在 pylint 结果中会有具有这种布局的行:
************** 模块 module_name.sub_module.class_name.method_nameR:line_no,列:问题描述some_name"(问题类型)C:line_no,column:问题描述'some_name'(问题类型)W:line_no,列:问题描述some_name"(问题类型)E: line_no, column: 问题描述'some_name'(问题类型)F:line_no,column:问题描述'some_name'(问题类型)************* 模块 module_name.sub_module.class_name.method_nameR:line_no,列:问题描述some_name"(问题类型)C:line_no,column:问题描述'some_name'(问题类型)W:line_no,列:问题描述some_name"(问题类型)E: line_no, column: 问题描述'some_name'(问题类型)F:line_no,column:问题描述'some_name'(问题类型)因此,在我的大多数情况下,问题类型(未定义变量)表示尚未导入的模块.pylint -E/path/to/module 将只返回未定义变量的错误.
I am trying to find all missing import statements and errors for each module and its sub modules.
Is there a dedicated tool for what I am trying to do?
The code that I wrote, but seems really terrible and maybe something like this exists already?:
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)
Outputs:
.[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]
My project before refactoring was a mess but sort of useful, now its broken after refactoring.
After reading 'The Pragmatic Programmer' based on suggestions from my initial post on codereview:
I have been digging around in the source code of:
/usr/local/lib/python2.7/dist-packages/rope
Documentation for ROPE seems a little sparse. I have also been using Ninja-IDE, but haven't been able to find a solution for the problem that I am facing.
Overall I think I missed the boat on what refactoring is all about.
The current parent directory layout can be seen here.
In comparison to what it was before.
Any help, on filling in missing terminology, or on what I am even asking would be great.
pylint -E /path/to/module
pip install pylint
Point pylint to the folder/module in question:
pylint /path/to/module > pylint_output
Where /path/to/module is the location of the python module you're interested in looking at.
For example:
my_project
|____ moduleA
|____ __init__.py
|____ A.py
|____ moduleB
|____ __init__.py
|____ B.py
./my_project/moduleA./my_project/moduleBThis will create a file with Global Evaluations on:
Of interest and the direct answer to my question is that within the pylint results there will be lines that have this sort of layout:
************* 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)
So an issue-type of (undefined-variable) in most of my cases indicate modules that have not been imported. pylint -E /path/to/module will return only the undefined-variable errors.
这篇关于Python Rope:如何在所有子模块重构中查找所有缺失的导入和错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持html5模板网!
python:不同包下同名的两个模块和类python: Two modules and classes with the same name under different packages(python:不同包下同名的两个模块和类)
配置 Python 以使用站点包的其他位置Configuring Python to use additional locations for site-packages(配置 Python 以使用站点包的其他位置)
如何在不重复导入顶级名称的情况下构造python包How to structure python packages without repeating top level name for import(如何在不重复导入顶级名称的情况下构造python包)
在 OpenShift 上安装 python 包Install python packages on OpenShift(在 OpenShift 上安装 python 包)
如何刷新 sys.path?How to refresh sys.path?(如何刷新 sys.path?)
分发带有已编译动态共享库的 Python 包Distribute a Python package with a compiled dynamic shared library(分发带有已编译动态共享库的 Python 包)