web-dev-qa-db-ja.com

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にこれを無視させるにはどうすればよいですか?

(通常は ドキュメント を読みに行きますが、リンクは壊れています。誰も答えがなければ、ソースを読むだけです。)

129
a paid nerd

代わりに flake8 を使用できる場合-pyflakesとpep8チェッカーをラップする-で終わる行

# NOQA

(スペースが重要な場合-コードの末尾と#の間に2つのスペース、コードとNOQAテキストの間に1つのスペース)は、チェッカーにその行のエラーを無視するように指示します。

205
yrstruly

私はこれがしばらく前に質問され、すでに回答されていることを知っています。

しかし、私は通常使用するものを追加したかった:

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

うん、残念ながらdimod.orgはすべてのグッズと一緒にダウンしています。

Pyflakesのコードを見ると、pyflakesは「組み込み高速チェッカー」として使いやすいように設計されているように思えます。

無視機能を実装するには、pyflakesチェッカーを呼び出す独自の機能を記述する必要があります。

ここでアイデアを見つけることができます: http://djangosnippets.org/snippets/1762/

上記のスニペットは、同じ行のコメントの場所にのみ注意してください。ブロック全体を無視するには、ブロックdocstringに 'pyflakes:ignore'を追加し、node.docに基づいてフィルターすることができます。

幸運を!


私はあらゆる種類の静的コード分析にポケットリントを使用しています。 pyflakesを無視するためにpocket-lintで行われた変更は次のとおりです。 https://code.launchpad.net/~adiroiban/pocket-lint/907742/+merge/102882

7
Adi Roiban

これは# bypass_pyflakesコメントオプションを追加する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

6
Chase Seibert

github issue ticket から引用するには:

修正はまだ行われていますが、これを回避する方法は次のとおりです。

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

Substitude _unittestおよび_WritelnDecoratorと必要なエンティティ(モジュール、関数、クラス)

- deemoowoor

5
Daenyth

__import__でインポートすることもできます。 Pythonicではありませんが、pyflakesはもう警告しません。 __import__のドキュメント を参照してください。

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

私はいくつかのawk魔法を使って小さなシェルスクリプトを作成しました。これにより、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 ...

基本的には、行番号を記録し、動的に正規表現を作成します。

0
phk