我怎么才能让派弗雷克忽略一个声明呢?

我们的很多模块都是这样开始的:

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

我怎么才能让派弗雷克忽略这个呢?

(通常我会去读 那些文件,但是链接断了。如果没有人回答,我就读源代码。)

63532 次浏览

是的,不幸的是 dimod.org 和所有的好东西都关闭了。

查看 pyflakes 代码,在我看来,pyflakes 的设计是为了便于将其用作“嵌入式快速检查器”。

为了实现忽略功能,您需要自己编写调用 pyflakes 检查器的代码。

在这里你可以找到一个想法: http://djangosnippets.org/snippets/1762/

注意,上面的代码片段只适用于同一行上的注释。 为了忽略整个块,您可能需要在块 docstring 和基于 node.doc 的 filter 中添加‘ pyflakes: monitor’。

祝你好运!


我用口袋里的线头做各种各样的静态程序分析。下面是在袖珍棉绒中为忽略片状物而做的更改: https://code.launchpad.net/~adiroiban/pocket-lint/907742/+merge/102882

你也可以用 __import__导入。它不是 pythonic,但 pyflakes 不再警告你了。参见 __import__的文件

try:
import json
except ImportError:
__import__('django.utils', globals(), locals(), ['json'], -1)

引用 Github 发行的票据的一句话:

虽然修复工作仍在进行中,但如果你想知道:

try:
from unittest.runner import _WritelnDecorator
_WritelnDecorator; # workaround for pyflakes issue #13
except ImportError:
from unittest import _WritelnDecorator

Substiude _ unittest 和 _ WritelnDecorator 以及您需要的实体(模块、函数、类)

—— Deemoowor

如果你可以使用 Flake8代替——它包装了 pyflakes 以及 pep8检查器——一行以

# NOQA

(其中空格是有意义的-在代码结束和 #之间有2个空格,在它和 NOQA文本之间有一个空格)将告诉检查器忽略该行上的任何错误。

我知道这个问题已经被质疑过一段时间了,而且已经得到了回答。

但我想加上我通常使用的:

try:
import json
assert json  # silence pyflakes
except ImportError:
from django.utils import simplejson as json  # Python 2.4 fallback.

这里是一个为 pyflakes 添加 # bypass_pyflakes注释选项的补丁。

Bypass _ 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

我用一些 awk魔法创建了一个小的 shell 脚本来帮助我。这样就排除了 import typingfrom 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 ...

基本上,它记录行号并动态地创建一个 regex。

对于 flake8,它是 建议的替代品(比较片状8和片状 给你)

添加第一行如下:

# flake8: noqa: E121, E131, E241, F403, F405

一般来说:

# flake8: noqa: <code>[, <code> ...]

这样,在一行中就可以使 entire file保持静默,并对 many忽略语句 at once执行此操作,这通常是一种情况。

弗雷克给你 忽略违规行为的一些选择

我最喜欢的一种方法是将其明确化,并忽略内联的特定违规:

my invalid code # noqa: WS03

你已经有其他的选择了。

  1. 忽略行中的所有验证:
my invalid code # NOQA
  1. 忽略文件中的所有验证,放在第一行:
# flake8: noqa: E121, E131, E241, F403, F405

或者配置忽略它作为一个参数在你的 Flake8配置。