私たちのモジュールの多くは以下で始まります:
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にこれを無視させるにはどうすればよいですか?
(通常は ドキュメント を読みに行きますが、リンクは壊れています。誰も答えがなければ、ソースを読むだけです。)
代わりに flake8 を使用できる場合-pyflakesとpep8チェッカーをラップする-で終わる行
# NOQA
(スペースが重要な場合-コードの末尾と#
の間に2つのスペース、コードとNOQA
テキストの間に1つのスペース)は、チェッカーにその行のエラーを無視するように指示します。
私はこれがしばらく前に質問され、すでに回答されていることを知っています。
しかし、私は通常使用するものを追加したかった:
try:
import json
assert json # silence pyflakes
except ImportError:
from Django.utils import simplejson as json # Python 2.4 fallback.
うん、残念ながら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
これは# bypass_pyflakes
コメントオプションを追加するpyflakesのモンキーパッチです。
#!/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
github issue ticket から引用するには:
修正はまだ行われていますが、これを回避する方法は次のとおりです。
try: from unittest.runner import _WritelnDecorator _WritelnDecorator; # workaround for pyflakes issue #13 except ImportError: from unittest import _WritelnDecorator
Substitude _unittestおよび_WritelnDecoratorと必要なエンティティ(モジュール、関数、クラス)
__import__
でインポートすることもできます。 Pythonicではありませんが、pyflakesはもう警告しません。 __import__
のドキュメント を参照してください。
try:
import json
except ImportError:
__import__('Django.utils', globals(), locals(), ['json'], -1)
私はいくつかのawk
魔法を使って小さなシェルスクリプトを作成しました。これにより、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 ...
基本的には、行番号を記録し、動的に正規表現を作成します。