143

我们的许多模块都以:

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

(通常我会去阅读文档,但链接已损坏。如果没有人有答案,我只会阅读源代码。)

4

9 回答 9

229

如果您可以改用flake8 - 它包含 pyflakes 以及 pep8 检查器 - 以结尾的行

# NOQA

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

于 2012-05-08T21:22:30.927 回答
55

我知道这是前段时间提出的问题,并且已经得到了回答。

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

try:
    import json
    assert json  # silence pyflakes
except ImportError:
    from django.utils import simplejson as json  # Python 2.4 fallback.
于 2012-08-25T11:01:30.717 回答
8

是的,不幸的是 dimod.org 和所有的好东西一起倒闭了。

查看 pyflakes 代码,在我看来,pyflakes 的设计使其易于用作“嵌入式快速检查器”。

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

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

请注意,上面的代码片段仅用于注释放在同一行。要忽略整个块,您可能需要在块文档字符串中添加“pyflakes:ignore”并基于 node.doc 进行过滤。

祝你好运!


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

于 2011-03-14T21:01:07.113 回答
6

引用github issue ticket

虽然修复仍在进行中,但如果您想知道,可以通过以下方式解决它:

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

Substitude _unittest 和 _WritelnDecorator 与您需要的实体(模块、函数、类)

--deemoowor _

于 2012-05-08T19:55:23.847 回答
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()

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

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

于 2013-01-11T23:25:16.490 回答
1

您也可以使用__import__. 它不是 pythonic,但 pyflakes 不再警告你了。请参阅__import__.

try:
    import json
except ImportError:
    __import__('django.utils', globals(), locals(), ['json'], -1)
于 2012-05-08T13:38:41.927 回答
1

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

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

my invalid code # noqa: WS03

你有其他已经引用的选项。

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

或者配置为在 flake8 配置中将其作为参数忽略。

于 2021-03-30T22:28:51.200 回答
0

对于flake8,这是推荐的替代方案(比较 flake8 与 pyflakes此处

添加第一行,如:

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

一般来说:

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

这样,您可以在一行中静默 theentire file并为manyignore statements执行此操作at once,这通常是一种情况。

于 2021-03-15T15:57:47.987 回答
0

我创建了一个带有一些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 ...

基本上它会记录行号并动态创建一个正则表达式。

于 2016-10-21T12:55:13.733 回答