Edited at

Visual Studio Code で pylint のメッセージを抑制する

Visual Studio Code、軽くてデバッグ機能が充実しています。PEP8、美しいです。

pylint、私の汚いコードをびしびし指導してくれます。でもメッセージの量が多すぎだ。


pylint のメッセージを抑制するための設定ファイル

pylint のメッセージを抑制するには、設定ファイル "settings.json" の "python.linting.pylintArgs" セクションを編集します。

Visual Studio Code のメニューからたどる場合は、"ファイル"-"基本設定"-"設定" で Settings タブを開き、右上の "..."-"settings.jsonを開く" でエディタを開いて設定をしていきます。

settings.json は、

{"設定名1": 設定内容1,

"設定名2": 設定内容2,

"設定名n": 設定内容n }

という書式で書かれているので、このファイルの適当な場所に、

"python.linting.pylintArgs": [設定内容],

というセクションを追加して設定を記述していきます。

ctrl+s でファイルを保存したら、Visual Studio Codeを再起動することなく設定が反映されます。


乱暴なメッセージ抑制方法

"python.linting.pylintArgs": ["--disable=Exxxx,Wyyyy"],

Exxxx とか Wyyyy とかいうメッセージは気に入らん! 俺は俺のスタイルで書くんだ! という場合、上のように書けばそのメッセージは金輪際出なくなります。カギカッコの部分は["--disable","Exxxx,Wyyyy"] と書いてもOKです。


メッセージ抑制方法 ケーススタディ


インデントの警告

"python.linting.pylintArgs": ["--indent-string=\"  \""],

インデントをどう書くかは、しばしば宗教論争を引き起こします。pylint はスペース4個以外のインデントを異端とみなして警告 W0311 を発生させますが、上のような設定を書くとインデントはスペース2個派に改宗します。["--indent-string=\t"] とすればタブをインデントだとみなします。

["--disable=W0311"] と書いてインデントの記法に関する警告を出さないようにもできますが、それはスペース3個派や1個派のような邪教徒を容認することになります。

 


E1101 エラー

"python.linting.pylintArgs": ["--extension-pkg-whitelist=numpy"],

E1101 は、オブジェクトにそのようなメンバーはないよ、というエラーです。

動的に変数にオブジェクトを割り当てる場合、変数がどのようなメンバーを持つのかはpylintは判らないのでE1101を出します。しかし、pythonでは変数に動的にオブジェクトを割り当てるのは当たり前なのでメッセージが山ほど出ます。上のようにエラーメッセージを出したくないライブラリ(ここではnumpy) を--extension-pkg-whitelist に指定すると、numpyオブジェクトにそんなメンバーはないよ、というエラーを動的な変数に対して出さなくなります。numpyオブジェクトであることが明確な所では正しくE1101エラーを発生させます。

 

"python.linting.pylintArgs": ["--generated-members=torch.*"],

pytorch というライブラリは恐らくpytorch側の問題によって不適切なE1101エラーを発生させます(バージョン0.4.1)。上のように書くと メンバーのチェックをしなくなるので、torchに対しては一切のE1101エラーが発生しなくなります。


W0612 警告

"python.linting.pylintArgs": ["--dummy-variables-rgx","^_$|^dummy$|^tmp.*$"],

W0612 は、変数が未使用だよ、という警告です。

あえて未使用の変数を使うシチュエーションは時々あると思います。例えば count 回のループを次のように書くと、変数 i が使われていないとして W0612 が発生します。

for i in range(count):

何らかの処理、でも変数 i は使わない

pylint ではこのような場合、変数に i ではなく、 _ (アンダースコア) もしくは dummy を使えば警告を出しません。

しかし、諸般の事情で未使用変数にこれ以外の名前をつけたい場合は、上のように --dummy-variables-rgx に許可する未使用変数名を正規表現で与えれば W0612 を抑制できます。上は _, dummy に加えて tmp で始まる変数名を、許可する未使用変数名に追加する例です。


複数の設定の記述方法

"python.linting.pylintArgs": [

"--disable","W0621,C0111,C0103",
"--indent-string=\" \"",
"--extension-pkg-whitelist", "numpy",
"--generated-members","torch.*"
],

私は上のように設定を書いてます