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


267

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

disable=C0321Pylint構成ファイルを追加してみましたが、Pylintはとにかくそれを報告することを強く求めています。その行のバリエーション(disable=0321またはのようなdisable=C321)はエラーとしてフラグが付けられるため、Pylint オプションを適切に認識し、単に無視します。

これはPylintのバグですか、それとも何か問題がありますか?これを回避する方法はありますか?私は本当にこのノイズのいくつかを取り除きたいです。


1
種類のすべてのエラーではなく、1行のコードを無効にする場合は、ここに適切な解決策があります。
Le Droid

回答:


168

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]


1
感謝しますが、すでに表示されている[MESSAGES CONTROL]セクションで既に実行されています。まだ無視されます。
オタクの頭

6
@Head Geek:まあ、それは私のために働く。~/.pylintrc2行[MESSAGES CONTROL]ありdisable=C0321ます。それはそのメッセージを防ぎます。
Chris Morgan

奇妙なこと... PyLintの正確に同じバージョン?
Geekヘッド

@Head Geek:0.21.3、astng 0.20.3およびcommon 0.52.1実際(インストールしたときの最新、あなたのものより新しい)
Chris Morgan

1
@クリスモーガン:ああ。おそらくすでに修正されたバグでしょう-私はUbuntuのリポジトリのバージョンを使用しています。ありがとう!
頭オタク

165

私はEclipseを使用してこの問題を抱えており、それを次のように解決しました:

Pylintフォルダー(例:)で、Shiftキーを押しながらC:\Python26\Lib\site-packages\pylint右クリックし、そのフォルダーで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

すべてのPylintメッセージコードへのリンク


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


2
いいえ、そうすべきではありません。1)Eclipseを参照しているため、尋ねられた質問とは無関係です。2)従来のメッセージコードを無効にすることをお勧めします。問題の最も簡単な解決策には私の回答を、詳細についてはChris Johnsonの回答をお勧めします。
imolit 2017年

153

Pylint v。0.25.3以降、すべてのコード番号を覚えておく代わりに、シンボリック名を使用して警告を無効にすることができます。例えば:

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

新しいスタイルのPylintはエラーコードではなくシンボリック名のみを出力するため、このスタイルはわかりにくいエラーコードよりもわかりやすく、より実用的です。

シンボリック名とコードの対応については、こちらをご覧ください

無効化コメントを独自の行に挿入して、同じブロックの後に続くすべてに無効化を適用できます。または、適用する行の最後に挿入することもできます。

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


20
しかし、# pylint: disable=fooインリンを入れるとラインが長くなりすぎるので、追加する必要があり, line-too-longます!ほほえみ; これは私が必要としていたものであり、私の問題を解決しました。ありがとう!
dwanderson 2017年

:実際に使用する文字列を含むリストgist.github.com/m451/965bb613177dd4fa896b815aa0e0e365
MASI

81

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

# pylint: disable=C0321

そのブロックに。


5
これはレガシー技術であり、推奨されなくなりました。他の答えを見てください。
Acumenus 2016年

1
コード番号の代わりにシンボリック名を使用する必要があるという意味ですか?
タキ、

5
はい。imolit答えはまさにこれをカバーしています。
Acumenus 2016年

2
どのようにしてシンボリック名を見つけるのですか?私のエディターは吐き出す[pylint] C0111: Missing method docstringので、コード番号を見つけるのは簡単ですが、記号名を見つけることは、それを調べる必要があることを意味します。
アダムパーキン

@AdamParkinここに私のメッセージを見つけました:pylint-messages.wikidot.com/all-messages
Jean-Francois T.

81

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

複数のアプローチ

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

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

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

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

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

  • ないホームディレクトリがある場合/root

    • ~/.pylintrc; または

    • ~/.config/pylintrc; または

    • /etc/pylintrc

これらのファイルのほとんどに名前が付けられていることに注意してください。先頭のドットが含まpylintrc~ているのはファイルのみです。

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

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

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

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

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

    • これらは、プラグマのすべての行に適用されます。これらのブロックをファイルの先頭に置くと、抑制がファイル全体に適用されます。同じブロックをファイルの下に置くと、ブロックの次の行にのみ適用されます。私のアプローチは、これらを常に独自の行に配置することです。これにより、単一行のスタイルと混同しないようにします(上記を参照)。

    • コードのスパン内でのみ抑制を適用する必要がある場合は、# pragma pylint: enable=bad-whitespace(現在enableはnot を使用してdisable)抑制を停止します。

単一の行# pylintを無効にすると構文が使用され、この行以降を無効にすると構文が使用されることに注意してください# pragma pylint。これらは、特にコピーと貼り付けを行うときに混乱しやすくなります。

すべてを一緒に入れて

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

  • ~/.pylintrcは完全にグローバルな標準を使用していますが、そのうちのごく一部です。

  • pylintrcプロジェクト固有の標準がある場合、Pythonモジュール内のさまざまなレベルでプロジェクトレベルを使用します。特に、他の人またはチームからコードを取り込む場合、彼らが好まない規則を使用していることに気付くかもしれませんが、コードを作り直す必要はありません。設定をこのレベルに保つことは、それらのプラクティスを他のプロジェクトに広げないようにするのに役立ちます。

  • 単一のソースファイルの先頭にあるブロックスタイルのプラグマを使用します。私は同意しないPylint標準(たとえ「パブリックメソッドが少なすぎる」-私は常にカスタム例外クラスでその警告を受け取ります)の場合でも、開発の最中はプラグマをオフ(メッセージの抑制を停止)にしたいです-開発中に、より多くの、場合によってはすべてのPylintメッセージを確認すると役立ちます。このようにして、1行のプラグマ(下記を参照)で対処するケースを見つけるか、次の開発者にコメントを追加して、このケースで警告が問題ない理由を説明できます。

  • コードをチェックインする準備ができているときでも、ブロックスタイルのプラグマの一部を有効のままにします。それらのいくつかを使用しようとしますが、モジュールにとって意味がある場合は、ドキュメントとして作成しても問題ありません。しかし、私はできる限り少ないままにし、できれば何もしないようにします。

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


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


1
最良の回答、stackoverflow.com
Christophe Roussy

1
ほとんどの場合、グローバルな空でないものを使用することはできません~/.pylintrc。IMHO、構成は通常プロジェクトに関連付けられる必要があるため、プロジェクト内のどこかにある必要があります。そうして初めて、バージョンを管理し、プロジェクトと共有することができます。これに失敗すると、クローンはメッセージを出力せずにpylintを終了するために必要なカスタマイズを欠いている可能性があります。
Acumenus 2016年

@ABB私はそれが賢明だと思います
クリスジョンソン

3
@ChrisJohnsonプレフィックスpragma はまったく不要のようです。たとえば# pylint: disable=missing-docstring、ファイルの先頭にあり、それがファイルの残り全体に適用されます。pragmaプレフィックスを確認して、回答から削除してください。
Acumenus 2016年

Pylint FAQには、プラグマについての記述はありません。(pylint.pycqa.org/en/latest/…):ファイルの上部にあるコメントに対応するオプションを追加することで、モジュールレベルでメッセージを無効または有効(全体的に無効)にすることができます。#pylint:disable = wildcard- import、method-hidden#pylint:enable = too-many-lines
Yaroslav Nikitenko

19

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

pylint --disable=C0321  test.py

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


これは今ではレガシー技術です。代わりに、無効化された警告のシンボル名を使用することをお勧めします。この回答を参照してください。
Acumenus

これは--py3kフラグでも機能しないようです:(
DylanYoung

おもしろいことに、rcファイルで指定すると問題なく動作し、(さらに厄介なことに)実際にはで正しいrcファイルが生成されます--generate-rcfile。同じことをする複数のブランチを持つコードが大好きです:(
DylanYoung

18

これはFAQです。

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

はい、この機能はPylint 0.11で追加されました。これは
# pylint: disable=some-message,another-one、目的のブロックレベルまたは目的のコード行の最後に追加することで実行できます。

4.2特定のモジュールのみのメッセージを無効にする方法はありますか?

はい、ファイルの上部にあるコメントに対応するオプションを追加することで、モジュールレベルでメッセージを無効または有効(全体的に無効)にすることができます。

# pylint: disable=wildcard-import, method-hidden
# pylint: enable=too-many-lines

次の方法でメッセージを無効にできます。

  • 数値ID: E1101E1102など
  • シンボリックメッセージ:no-memberundefined-variableなど
  • チェックのグループの名前。あなたはそれらをつかむことができpylint --list-groupsます。
  • チェックのカテゴリ:CRW、など
  • でのすべてのチェックall

のメッセージの完全なリストについては、ドキュメントを参照(またはpylint --list-msgsターミナルで実行)してpylintください。ドキュメントには、この機能の使用方法の良いも含まれています。


5

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

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

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


4

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


0

Pylintのドキュメントに従って、最も簡単なのはこのチャートを使用することです。

  • C規約関連のチェック
  • Rリファクタリング関連チェック
  • Wさまざまな警告
  • Eエラー、コード内の推定バグ
  • F致命的。エラーが発生し、pylintがそれ以上処理できなくなった場合。

したがって、以下を使用できます。

pylint -j 0 --disable=I,E,R,W,C,F YOUR_FILES_LOC

-1

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

したがって、この問題を解決する別の方法は、lintメッセージが存在する理由を理解し、1行に複数のステートメントを記述しないことです。

はい。1行に複数のステートメントを書く方が簡単な場合がありますが、pylintはあなただけでなく、コードを読む他のすべての読者のためのものです。


-1

あなたはこれを試してみたいかもしれません:

「C:\ Users \ Your User \ AppData \ Roaming \ Code \ User \ settings.json」を編集python.linting.pylintArgsし、以下に示すように最後に行を追加します。

{
    "team.showWelcomeMessage": false,
    "python.dataScience.sendSelectionToInteractiveWindow": true,
    "git.enableSmartCommit": true,
    "powershell.codeFormatting.useCorrectCasing": true,
    "files.autoSave": "onWindowChange",
    "python.linting.pylintArgs": [
        "--load-plugins=pylint_django",
        "--errors-only"
    ],
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.