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=0321
やdisable=C321
のような)はエラーとしてフラグが立てられます、それでPylint はします正しくオプションを認識します、それはただそれを無視します。
これはPylintのバグですか、それとも私は何か悪いことをしていますか?これを回避する方法はありますか?私は本当にこのノイズの一部を取り除きたいです。
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]
行を入れるべきです。
私は使用してこの問題を抱えていた エクリプス そしてそれを次のように解決した。
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メッセージは辞書_messages
、pylint.utils.MessagesHandlerMixIn
クラスのインスタンスの属性に格納されています。引数--disable-ids=...
を指定して(少なくとも設定ファイルなしで)pylintを実行すると、この辞書は最初は空であり、pylint(pylint.utils.MessagesHandlerMixIn.check_message_id()
)内でKeyError例外が発生します。Eclipseでは、Pylintコンソールでこのエラーメッセージを見ることができます - コンソール、コンソールアイコン以外のコンソールオプションからPylintコンソールを選択します。)
Pylint v。0.25.3以降では、警告を無効にするために記号名を使用することができます 。これらのコード番号すべてを覚えておく必要はありません 。例えば。:
# pylint: disable=locally-disabled, multiple-statements, fixme, line-too-long
このスタイルは、不可解なエラーコードよりも有益で、Pylintの新しいバージョンはエラーコードではなくシンボリック名のみを出力するため、より実用的です。
無効化コメントを独自の行に挿入して、同じブロック内の後に続くすべてのものに無効化を適用できます。あるいは、適用することを意図している行の終わりに挿入することができます。
Pylintが "Locally disabling
"メッセージを出力する場合、上記の例のようにdisable locally-disabled
firstを含めることでそれらを取り除くことができます。
ブロック内でローカルに警告を無効にするには、つぎを追加します。
# pylint: disable=C0321
そのブロックに。
Pylintからの警告とエラーを無効にする方法はいくつかあります。どちらを使用するかは、障害をグローバルまたはローカルにどの程度適用したいかに関係します。これは重要な設計上の決定です。
複数のアプローチ
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
AbooとCairnarvonによって説明されているように、pylint
コマンドラインからさらに無効にします。これはpylint --disable=bad-builtin
のように見えます。追加の項目を抑制するために--disable
を繰り返します。
Imolitが説明しているように、個々のPythonコード行からさらに無効にします。これらはsome statement # pylint: disable=broad-except
(元のソース行の終わりに追加のコメント)と現在の行にのみ適用されますのように見えます。私のアプローチは、これらを他のコード行の最後に置くことで、ブロックスタイルと混同されないようにすることです。下記を参照してください。
より完全なソースファイルまで、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に対してあまりにも寛大すぎるアプローチになってしまうことはありません。
次のコマンドを使用することもできます。
pylint --disable=C0321 test.py
私のPylintのバージョンは0.25.1です。
これは FAQ です。
4.1特定のメッセージをローカルに無効にすることは可能ですか?
はい、この機能はPylint 0.11で追加されました。これは追加することによって行われるかもしれません
「#pylint:disable = some-message、another-one」は、目的のブロックレベルまたは目的のコード行の末尾にあります。
コードまたはシンボル名でメッセージを無効にすることができます。 pylintのメッセージの完全なリストは docs (あるいは端末でpylint --list-msgs
を実行する)を見てください。
ドキュメントには、この機能の使い方のNice example も記載されています。
無効にするものを無効にするには、1行追加するだけです。例えば。
#pylint: disable = line-too-long, too-many-lines, no-name-in-module, import-error, multiple-imports, pointless-string-statement, wrong-import-order
これをモジュールの#1に追加します
これが誰かに役立つ場合、あなたがVisual Studio Codeを使っているならば、それはファイルがUTF8エンコーディングであることを期待します。ファイルを生成するために、PowerShellでpylint --generate-rcfile | out-file -encoding utf8 .pylintrc
を実行しました。
Pythonの構文では、セミコロン(;)で区切って1行に複数のステートメントを使用できます。しかし、各行を1つのステートメントに限定すると、人間がプログラムを読み進めるときにプログラムのロジックに従うのが容易になります。
したがって、この問題を解決するもう1つの方法は、なぜlintメッセージがあるのかを理解し、1行に複数のステートメントを記述しないことです。
はい、1行に複数のステートメントを書くほうが簡単だと思うかもしれませんが、pylintはあなただけではなく他のコードを読む人すべてのためのものです。