我想获得一些关于这些工具的反馈:
我们的许多模块都以:
try:
import json
except ImportError:
from django.utils import simplejson as json # Python 2.4 fallback.
Run Code Online (Sandbox Code Playgroud)
......这是整个文件中唯一的Pyflakes警告:
foo/bar.py:14: redefinition of unused 'json' from line 12
Run Code Online (Sandbox Code Playgroud)
我怎么能让Pyflakes忽略这个?
(一般情况下我会去阅读的文档,但链接已断开.如果没有人有答案,我只是读取源.)
为了检查python模式中的代码,我使用flymake和pyflakes
另外我想用pylint检查代码样式(pep8)(与pyflakes在同一页面上的描述)
此解决方案有效.但我无法配置flymake与pyflakes和pylint一起工作.我该怎么做?
我正在尝试使用flymake运行pyflakes,如此处所示
这适用于本地文件,并且几乎可以通过稍微调整来处理远程文件,但是我遇到了一个问题,即flymake/pyflakes'在运行时修改了缓冲区(尽管实际上似乎没有任何变化),这会呈现它在实践中有点无用(例如,保存文件运行flymake,它会立即再次修改缓冲区).
这就是我几乎让它工作的方法:
tramp-remote-process-environment
变量,以便可以在其PATH中找到pyflakes(when (load "flymake" t) ...)
构造似乎没有像我预期的那样工作,但我并不太担心.flymake-start-syntax-check-process
函数,以便它使用start-file-process
(与tramp一起使用)而不是start-process
(没有).处理本地文件时#4中的更改似乎不会导致任何问题,但现在这使得flymake能够为远程文件运行远程pyflakes(错误会按预期突出显示),在这种情况下缓冲区被"修改"每当flymake运行时.
我猜测start-file-process
,对于远程进程,会导致本地进程不会发生一些额外的返回值/数据.
有没有人有任何见解/建议?
我像往常一样通过git克隆它在我的Pathogen bundle文件夹上安装了vim-flake8,但是当我尝试在一个Python文件中按下F7或使用插件时:call Flake8()
,我收到以下消息:
处理函数Flake8时检测到错误:
第8行:
找不到文件flake8.请先安装它.
任何人都有一些关于发生了什么的线索?
我正在研究一个django项目,我正试图在其中的应用程序上运行pyflakes.我需要从pyflakes中排除"迁移"目录.
对于pep8我能做到
pep8 --exclude=migrations app_name
Run Code Online (Sandbox Code Playgroud)
pyflakes有类似的方法吗?
我找不到任何适合pyflakes的文档.
Pyflakes与以下代码的处理不太合理:
@property
def nodes(self):
return self._nodes
@nodes.setter
def nodes(self, nodes):
"""
set the nodes on this object.
"""
assert nodes != [] # without nodes no route..
self.node_names = [node.name for node in nodes]
self._nodes = nodes
Run Code Online (Sandbox Code Playgroud)
使用使用pyflakes的vim和syntastic我得到以下错误:
W806 redefinition of function 'nodes' from line 5
Run Code Online (Sandbox Code Playgroud)
所以我收到警告,@nodes.setter
因为我重新定义了nodes
.
如何禁用此无用警告,因为此代码是正确的?或者哪个python检查器正确处理此代码?
更新
我在重构代码时遇到了一些问题,因为属性和函数具有不同的继承行为.访问基类的属性是不同的.看到:
所以我现在倾向于避免使用这种语法并使用适当的函数.
我们使用Hudson与Violations插件持续集成,后者从pylint解析我们的输出.但是,pylint有点过于严格,而且很难配置.我们宁愿使用的是pyflakes,它会给我们正确的"你做错了".
在我的项目的主脚本中,gettext
安装_()
在其他模块中用于翻译的函数(如in print(_('Something to translate'))
).
正如文件所述:
_()函数[是]安装在Python的内置命名空间中,因此可以在应用程序的所有模块中轻松访问它.
所以,一切都运行良好.
唯一的问题:flake8
显示错误(实际上由PyFlakes返回):
$ flake8 *.py
lib.py:2:12: F821 undefined name '_'
main_script.py:8:7: F821 undefined name '_'
Run Code Online (Sandbox Code Playgroud)
这是正常的,因为_
在main_script.py和lib.py中确实没有定义.
.
??? lib.py
??? locale
? ??? de
? ??? LC_MESSAGES
? ??? myapp.mo
? ??? myapp.po
??? main_script.py
Run Code Online (Sandbox Code Playgroud)
lib.py包含这个:
def fct(sentence):
return _(sentence)
Run Code Online (Sandbox Code Playgroud)
和main_script.py这个:
#!/usr/bin/env python3
import gettext
import lib
gettext.translation('myapp', 'locale', ['de']).install()
print(_('A sentence'))
print(lib.fct('A sentence'))
Run Code Online (Sandbox Code Playgroud)
和myapp.po包含:
msgid ""
msgstr ""
"Project-Id-Version: …
Run Code Online (Sandbox Code Playgroud) W391 规定文件末尾应该有一个(且只有一个)空行。然而,当文件末尾至少有一个换行符时,flake8 会报告错误:
$ cat /tmp/test.py
def hello():
print('hello')
hello()
Run Code Online (Sandbox Code Playgroud)
$ hexdump -C /tmp/test.py
00000000 64 65 66 20 68 65 6c 6c 6f 28 29 3a 0a 20 20 20 |def hello():. |
00000010 20 70 72 69 6e 74 28 27 68 65 6c 6c 6f 27 29 0a | print('hello').|
00000020 0a 0a 68 65 6c 6c 6f 28 29 0a 0a |..hello()..|
0000002b
Run Code Online (Sandbox Code Playgroud)
您可以在上面看到,文件末尾实际上只有一个空行(0a
is \n
)。但是,当我运行 flake8 时,出现 W391 错误:
$ flake8 /tmp/test.py
/tmp/test.py:6:1: …
Run Code Online (Sandbox Code Playgroud)