问题:我如何让Pyflakes忽略声明?
我们的许多模块都始于:
try:
import json
except ImportError:
from django.utils import simplejson as json # Python 2.4 fallback.
…这是整个文件中唯一的Pyflakes警告:
foo/bar.py:14: redefinition of unused 'json' from line 12
我如何让Pyflakes忽略这一点?
(通常我会去阅读文档,但是链接断开了。如果没有人回答,我只会阅读源代码。)
回答 0
如果您可以改用flake8-包裹pyflakes和pep8 checker-则以
# NOQA
(其中的空格非常大-代码末尾与之间的2个空格,在代码与文本#
之间的一个空格NOQA
)将告诉检查程序忽略该行上的任何错误。
回答 1
我知道这是在不久前被质疑的,并且已经得到答复。
但是我想补充一下我通常使用的内容:
try:
import json
assert json # silence pyflakes
except ImportError:
from django.utils import simplejson as json # Python 2.4 fallback.
回答 2
是的,不幸的是dimod.org和所有好东西都一起倒了。
看一下pyflakes代码,在我看来pyflakes是经过设计的,因此可以很容易地将其用作“嵌入式快速检查器”。
为了实现忽略功能,您将需要编写自己的调用pyflakes检查器。
在这里您可以找到一个主意:http : //djangosnippets.org/snippets/1762/
请注意,以上代码段仅用于同一行中的注释位置。为了忽略整个块,您可能需要在块docstring中添加’pyflakes:ignore’并基于node.doc进行过滤。
祝好运!
我正在使用Pocket-lint进行各种静态代码分析。以下是在Pocket-Lint中忽略pyflakes所做的更改:https ://code.launchpad.net/~adiroiban/pocket-lint/907742/+merge/102882
回答 3
引用github问题票证:
尽管此修复程序仍在进行中,但是如果您想知道,可以通过以下方法解决:
try: from unittest.runner import _WritelnDecorator _WritelnDecorator; # workaround for pyflakes issue #13 except ImportError: from unittest import _WritelnDecorator
用所需的实体(模块,函数,类)替换_unittest和_WritelnDecorator
回答 4
这是pyflakes的Monkey补丁,添加了# bypass_pyflakes
注释选项。
passive_pyflakes.py
#!/usr/bin/env python
from pyflakes.scripts import pyflakes
from pyflakes.checker import Checker
def report_with_bypass(self, messageClass, *args, **kwargs):
text_lineno = args[0] - 1
with open(self.filename, 'r') as code:
if code.readlines()[text_lineno].find('bypass_pyflakes') >= 0:
return
self.messages.append(messageClass(self.filename, *args, **kwargs))
# monkey patch checker to support bypass
Checker.report = report_with_bypass
pyflakes.main()
如果将其另存为bypass_pyflakes.py
,则可以将其调用为python bypass_pyflakes.py myfile.py
。
http://chase-seibert.github.com/blog/2013/01/11/bypass_pyflakes.html
回答 5
您也可以使用导入__import__
。它不是pythonic,但是pyflakes不再警告您。请参阅的文档__import__
。
try:
import json
except ImportError:
__import__('django.utils', globals(), locals(), ['json'], -1)
回答 6
我创建了一个带有一些awk
魔术的shell脚本来帮助我。有了这个的所有生产线import typing
,from typing import
或#$
(后者是我在这里使用一个特殊的注释)被排除($1
是Python脚本的文件名):
result=$(pyflakes -- "$1" 2>&1)
# check whether there is any output
if [ "$result" ]; then
# lines to exclude
excl=$(awk 'BEGIN { ORS="" } /(#\$)|(import +typing)|(from +typing +import )/ { print sep NR; sep="|" }' "$1")
# exclude lines if there are any (otherwise we get invalid regex)
[ "$excl" ] &&
result=$(awk "! /^[^:]+:(${excl}):/" <<< "$result")
fi
# now echo "$result" or such ...
基本上,它会记录行号并动态创建一个正则表达式。