我怎么让Pyflakes忽略一个陈述?

a p*_*erd 132 python pyflakes

我们的许多模块都以:

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忽略这个?

(一般情况下我会去阅读的文档,但链接已断开.如果没有人有答案,我只是读取源.)

小智 209

如果你可以使用flake8 - 它包含pyflakes以及pep8检查器 - 一行以

# NOQA

(其中空间很重要 - 代码末尾和#它与NOQA文本之间的2个空格)将告诉检查者忽略该行上的任何错误.

  • 很好,但不是pyflakes的解决方案 (12认同)
  • 提示:添加此行`#flake8:noqa`将告诉flake8忽略整个文件的验证. (5认同)
  • 提示`#noqa:F841`意味着只忽略该行的'F841`错误. (5认同)
  • `#noqa`只忽略某些警告/错误,但不是全部 - 为了解决这个问题,解决方法涉及在https://pypi.python.org/pypi/flake8-respect-noqa上安装/使用该软件包 (3认同)

mfu*_*ger 45

我知道这是前一段时间受到质疑的,已经得到了解答.

但我想添加我通常使用的内容:

try:
    import json
    assert json  # silence pyflakes
except ImportError:
    from django.utils import simplejson as json  # Python 2.4 fallback.
Run Code Online (Sandbox Code Playgroud)

  • 这实际上就是我们最终要做的。(好吧,这个解析 pyflakes 输出会忽略带有“silence pyflakes”注释的行上的错误。)谢谢! (2认同)

Adi*_*ban 7

是的,不幸的是,dimod.org与所有好吃的东西都在一起.

看看pyflakes代码,在我看来pyflakes的设计使它很容易被用作"嵌入式快速检查器".

要实现忽略功能,您需要编写自己的调用pyflakes检查器.

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

请注意,上面的代码段仅用于注释放在同一行.要忽略整个块,您可能需要在块docstring中添加'pyflakes:ignore',并基于node.doc进行过滤.

祝好运!


我使用pocket-lint进行各种静态代码分析.以下是用于忽略pyflakes的pocket-lint所做的更改:https://code.launchpad.net/~adiroiban/pocket-lint/907742/+merge/102882


Cha*_*ert 6

这是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()
Run Code Online (Sandbox Code Playgroud)

如果将其另存为bypass_pyflakes.py,则可以将其作为调用python bypass_pyflakes.py myfile.py.

http://chase-seibert.github.com/blog/2013/01/11/bypass_pyflakes.html


Dae*_*yth 5

引用github问题门票:

虽然修复工作仍在进行中,但如果你想知道它是如何解决的:

try:
    from unittest.runner import _WritelnDecorator
    _WritelnDecorator; # workaround for pyflakes issue #13
except ImportError:
    from unittest import _WritelnDecorator
Run Code Online (Sandbox Code Playgroud)

将_unittest和_WritelnDecorator与您需要的实体(模块,函数,类)进行对比

- deemoowoor

  • 实际上,使用“dis.dis”,这显然会单独为一行上的每个变量执行“LOAD_FAST”和“POP_TOP”(将其放入堆栈中,然后将其从堆栈中删除?),所以它并不是什么都不做。不过,比“断言”更好。 (2认同)

nev*_*ves 5

Flake 为您提供了一些忽略违规行为的选项

我最喜欢的一种方式是使其明确并忽略特定的内联违规:

my invalid code # noqa: WS03
Run Code Online (Sandbox Code Playgroud)

您还有其他已经引用过的选项。

  1. 忽略该行中的所有验证:
my invalid code # NOQA
Run Code Online (Sandbox Code Playgroud)
  1. 忽略文件中的所有验证。放入第一行:
# flake8: noqa: E121, E131, E241, F403, F405
Run Code Online (Sandbox Code Playgroud)

或者配置为忽略它作为 flake8 配置中的参数。