web-dev-qa-db-ja.com

Pylintの警告を無効にするにはどうすればいいですか?

Pylint 0.21.1で、警告C0321(「単一行に複数のステートメント」 - 短い単一行の結果を含むifステートメントを配置することがよくあります)を無効にしようとしています(astng 0.20 .1、共通0.50.3、Python 2.6.6(r266:84292、 2010年9月15日、16:22:56))。

私はPylint設定ファイルにdisable=C0321を追加しようとしました、しかしPylintはとにかくそれを報告することを主張します。その行のバリエーション(disable=0321disable=C321のような)はエラーとしてフラグが立てられます、それでPylint はします正しくオプションを認識します、それはただそれを無視します。

これはPylintのバグですか、それとも私は何か悪いことをしていますか?これを回避する方法はありますか?私は本当にこのノイズの一部を取り除きたいです。

209
Head Geek

pylint --generate-rcfileはこのように表示します。

[MESSAGES CONTROL]

# Enable the message, report, category or checker with the given id(s). You can
# either give multiple identifier separated by comma (,) or put this option
# multiple time.
#enable=

# Disable the message, report, category or checker with the given id(s). You
# can either give multiple identifier separated by comma (,) or put this option
# multiple time (only on the command line, not in the configuration file where
# it should appear only once).
#disable=

そのため、あなたの~/.pylintrcはセクションdisable=の中に[MESSAGES CONTROL]行を入れるべきです。

132
Chris Morgan

私は使用してこの問題を抱えていた エクリプス そしてそれを次のように解決した。

pylintフォルダー(例:C:\Python26\Lib\site-packages\pylint)で、shiftキーを押しながら右クリックしてそのフォルダーでwindowsコマンドを開くように選択します。タイプ:

lint.py --generate-rcfile > standard.rc

これでstandard.rc設定ファイルが作成されます。メモ帳で[MESSAGES CONTROL]の下に開き、disable=のコメントを外し、無効にするメッセージIDを追加します。

disable=W0511, C0321

ファイルを保存し、Eclipse-> window-> preferences-> PyDev-> pylintの引数ボックスに、次のように入力します。

--rcfile=C:\Python26\Lib\site-packages\pylint\standard.rc

今それは動作するはずです...


あなたもすることができます コメントを追加 pylintによって解釈されるコードの先頭に、

# pylint: disable=C0321

すべてにリンク ピリントメッセージコード


追加引数ボックスの--disable-ids=C0321は機能しません。利用可能なすべてのpylintメッセージは辞書_messagespylint.utils.MessagesHandlerMixInクラスのインスタンスの属性に格納されています。引数--disable-ids=...を指定して(少なくとも設定ファイルなしで)pylintを実行すると、この辞書は最初は空であり、pylint(pylint.utils.MessagesHandlerMixIn.check_message_id())内でKeyError例外が発生します。Eclipseでは、Pylintコンソールでこのエラーメッセージを見ることができます - コンソール、コンソールアイコン以外のコンソールオプションからPylintコンソールを選択します。)

140
Remi

Pylint v。0.25.3以降では、警告を無効にするために記号名を使用することができます 。これらのコード番号すべてを覚えておく必要はありません 。例えば。:

# pylint: disable=locally-disabled, multiple-statements, fixme, line-too-long

このスタイルは、不可解なエラーコードよりも有益で、Pylintの新しいバージョンはエラーコードではなくシンボリック名のみを出力するため、より実用的です。

シンボリック名とコードの対応はこちら にあります。

無効化コメントを独自の行に挿入して、同じブロック内の後に続くすべてのものに無効化を適用できます。あるいは、適用することを意図している行の終わりに挿入することができます。

Pylintが "Locally disabling"メッセージを出力する場合、上記の例のようにdisable locally-disabledfirstを含めることでそれらを取り除くことができます。

124
imolit

ブロック内でローカルに警告を無効にするには、つぎを追加します。

# pylint: disable=C0321

そのブロックに。

70
thakis

Pylintからの警告とエラーを無効にする方法はいくつかあります。どちらを使用するかは、障害をグローバルまたはローカルにどの程度適用したいかに関係します。これは重要な設計上の決定です。

複数のアプローチ

  1. 1つ以上のpylintrcファイル内。

これには、Chris Morganが説明しているように、($ HOMEディレクトリにある)~/.pylintrcファイル以外のものも含まれます。 Pylintはrcファイルを検索します。優先順位は「近い」ファイルをより高く評価します。

  • 現在の作業ディレクトリにあるpylintrcファイル。または

  • 現在の作業ディレクトリがPythonモジュール内にある場合(つまり、__init__.pyファイルが含まれている場合)、pylintrcファイルが見つかるまでPythonモジュールの階層を検索します。または

  • 環境変数PYLINTRCで指定されたファイル。または

  • ホームディレクトリが/rootではない場合:

    • ~/.pylintrc;または

    • ~/.config/pylintrc;または

    • /etc/pylintrc

これらのファイルの大部分はpylintrcという名前であることに注意してください - ~内のファイルのみ先頭にドットが付きます。

pylintrcファイルに、特定のpylintメッセージを無効にする行を追加します。例えば:

[MESSAGES CONTROL]
disable=locally-disabled
  1. AbooとCairnarvonによって説明されているように、pylintコマンドラインからさらに無効にします。これはpylint --disable=bad-builtinのように見えます。追加の項目を抑制するために--disableを繰り返します。

  2. Imolitが説明しているように、個々のPythonコード行からさらに無効にします。これらはsome statement # pylint: disable=broad-except(元のソース行の終わりに追加のコメント)と現在の行にのみ適用されますのように見えます。私のアプローチは、これらを他のコード行の最後に置くことで、ブロックスタイルと混同されないようにすることです。下記を参照してください。

  3. より完全なソースファイルまで、Pythonコードのより大きなブロックに対して定義されたものをさらに無効にします。

    • これらは# pragma pylint: disable=bad-whitespaceのように見えます(pragmaキーワードに注意してください)。

    • これらはその後のすべての行に適用されますプラグマです。これらのブロックをファイルの先頭に置くと、抑制がファイル全体に適用されます。ファイル内で同じブロックを下に置くと、それらはブロックに続く行にのみ適用されます。私のアプローチは、これらを一行のスタイルと混同しないように、常にそれらを一行に並べることです。上を見てください。

    • 抑制がコードの範囲内でのみ適用される場合は、抑制を停止するために# pragma pylint: enable=bad-whitespace(現在はenableではなくdisableを使用)を使用します。

単一行を無効にすると# pylint構文が使用され、この行以降を無効にすると# pragma pylint構文が使用されます。これらは特にコピー&ペーストするときに混乱しやすいです。

まとめて

私は通常これらのアプローチを組み合わせて使います。

  • 私は~/.pylintrcを絶対的にグローバルな標準のために使います - これらの非常に少数。

  • プロジェクト固有の標準がある場合は、Pythonモジュール内のさまざまなレベルでプロジェクトレベルのpylintrcを使用します。特に他の人やチームからコードを取り込むとき、彼らがあなたが好まない慣習を使うのを見つけるかもしれません、しかしあなたはコードを作り直すことを望まない。設定をこのレベルに維持することは、それらの習慣を他のプロジェクトに広げないために役立ちます。

  • 私は単一のソースファイルの冒頭でブロックスタイルプラグマを使います。私は賛成できないPylint標準のために開発の熱の中でプラグマをオフにする(メッセージの抑制を止める)のが好きです( "あまりにも少ないパブリックメソッド" - 私はいつもカスタムExceptionクラスでその警告を得ます) - あなたが開発している間それはもっと/多分すべてのPylintメッセージを見ることは役に立ちます。こうすれば、単一行プラグマで対処したいケースを見つけることができ(下記参照)、あるいはこのケースでなぜその警告が問題ないのかを説明するために次の開発者にコメントを追加することができます。

  • コードをチェックインする準備が整ったときでも、一部のブロックスタイルプラグマを有効にしたままにします。それらを使用することはほとんどありませんが、モジュールとして意味がある場合は、ドキュメントとして実行してもかまいません。しかし、私はできるだけ少なく、できる限り残さないようにしています。

  • 特に強力なエラーに対処するには、単一行コメントスタイルを使用します。たとえば、実際にexcept Exception as excを実行する意味がある場所がある場合は、よりグローバルなアプローチではなく、その行に# pylint: disable=broad-exceptを付けます。これは奇妙な例外であり、基本的にはドキュメントの形式として呼び出す必要があるためです。


Pythonの他のすべてのものと同じように、あなたはさまざまなレベルの間接指定で行動することができます。私のアドバイスは、何がどのレベルに属しているのかを考えることです。そうすれば、Pylintに対してあまりにも寛大すぎるアプローチになってしまうことはありません。

65
Chris Johnson

次のコマンドを使用することもできます。

pylint --disable=C0321  test.py

私のPylintのバージョンは0.25.1です。

12
aboo

これは FAQ です。

4.1特定のメッセージをローカルに無効にすることは可能ですか?

はい、この機能はPylint 0.11で追加されました。これは追加することによって行われるかもしれません
「#pylint:disable = some-message、another-one」は、目的のブロックレベルまたは目的のコード行の末尾にあります。

コードまたはシンボル名でメッセージを無効にすることができます。 pylintのメッセージの完全なリストは docs (あるいは端末でpylint --list-msgsを実行する)を見てください。
ドキュメントには、この機能の使い方のNice example も記載されています。

8
Eugene Yarmash

無効にするものを無効にするには、1行追加するだけです。例えば。

#pylint: disable = line-too-long, too-many-lines, no-name-in-module, import-error, multiple-imports, pointless-string-statement, wrong-import-order

これをモジュールの#1に追加します

3
Chetan Malhotra

これが誰かに役立つ場合、あなたがVisual Studio Codeを使っているならば、それはファイルがUTF8エンコーディングであることを期待します。ファイルを生成するために、PowerShellでpylint --generate-rcfile | out-file -encoding utf8 .pylintrcを実行しました。

2
Elijah W. Gagne

Pythonの構文では、セミコロン(;)で区切って1行に複数のステートメントを使用できます。しかし、各行を1つのステートメントに限定すると、人間がプログラムを読み進めるときにプログラムのロジックに従うのが容易になります。

したがって、この問題を解決するもう1つの方法は、なぜlintメッセージがあるのか​​を理解し、1行に複数のステートメントを記述しないことです。

はい、1行に複数のステートメントを書くほうが簡単だと思うかもしれませんが、pylintはあなただけではなく他のコードを読む人すべてのためのものです。

0
hrf