web-dev-qa-db-ja.com

メッセージC0103を停止するようにPyLintに「定数ではなく変数です」と伝えるにはどうすればよいですか?

Python 2.6 "_log"という名前のプログラムにモジュールレベルの変数があり、PyLintは次のように不満を言っています:

C0103: Invalid name "_log" (should match (([A-Z_][A-Z0-9_]*)|(__.*__))$)

この回答 を読んだことで、なぜこれを行っているのか理解できました。変数は定数であると考え、定数正規表現を適用します。しかし、私は違うことを請います。それは変数だと思います。文句を言わないようにPyLintに伝えるにはどうすればよいですか? PyLintは、それが変数であるか定数であるかをどのように判断しますか?すべてのモジュールレベルの変数を定数として扱うだけですか?

64
EMP
# pylint: disable-msg=C0103

これらの警告を無視するスコープに配置します。上記の行末コメントを作成して、そのコード行のメッセージのみを無効にすることもできます。

IIRCは、pylintがすべてのモジュールレベルの変数を「定数」として解釈することは事実です。

pylintの新しいバージョンでは、代わりにこの行を使用します

# pylint: disable=C0103
90
ChristopheD

また、pylintrcで常に許可される「良い名前」のコンマ区切りリストを指定することもできます。例:

[BASIC]
good-names=_log
21
AdamR

私には少しリファクタリングが役立つかもしれません。 Pylintはこれをモジュールとして見ているため、このレベルで変数が表示されることを期待しないのが合理的です。逆に、クラスや関数の変数については文句を言いません。次のパラダイムは非常に一般的であり、問​​題を解決します。

def main():
    '''Entry point if called as an executable'''
    _log = MyLog()  # . . .

if __== '__main__':
    main()

これには、いくつかの便利なクラスがあれば、メインを実行せずにそれらをインポートできるという利点があります。 __ name __はモジュールのものであるため、「if」は失敗します。

16
ryszards0.02c

Pylintの新しいバージョンでは、この行は現在

# pylint: disable=C0103

有効化メッセージは簡単です

# pylint: enable=C0103
11
studioj

他の回答が示しているように、次の行を含めることにより、特定のPyLint警告(C0103など)を無効にできます。

# pylint: disable=C0103

しかし、これはLocally disabling invalid-name警告を生成します。無効になった警告を思い出したい場合は、この二次警告が役立つことに注意してください。構成ファイルを変更せずに警告をサイレントに無効にしたい場合(警告をグローバルに無効にします)、次を使用できます。

# pylint: disable=I0011,C0103

PyLintは、I0011を無効にしているという警告を発行しないことに注意してください!

3
banbh

ファイル内のメッセージをローカルで無効にすると、Pylintは別の異なる警告を報告します!

Locally disabling invalid-name (C0103) [I:locally-disabled] 

クリーンリントの実行が意図されており、それが確実にターゲットである必要があり、そうでなければわざわざわざわざわざわざわざわざわざわざ作成する必要がある場合は、構成ファイルでそのメッセージと対応するローカルで有効なメッセージを無効にできます。

disable=locally-disabled, locally-enabled
2
RobG