これはなに
Google Python Style Guide 、項目2.1 Lintのまとめ。
ポイント
- Linterを使う
- 問題を隠さなければ、不適切な警告は抑制してよい
- 未使用引数の警告は、関数の先頭で変数を削除(
del
)して抑制する
Linterとは
Linterとはソースコードのバグやスタイルの問題を見つけるためのツールである。基本的にはベストプラクティスな書き方に則っていない部分を警告するツールだが、コードスタイルのチェックも行ってくれるものもある。
Linterは静的型付け言語のコンパイラが検出するような問題を警告する。しかし、Pythonは動的型付け言語のため、いくつかの警告は正しくない可能性がある。
Google Python Style Guideでは、Linterとして、特定のpylintrcに則ったpylint
の利用を推奨している。pylintrcのファイルは元サイトで示されており、誰でもダウンロードできる。
長所と短所
Linterを利用すれば見逃しやすいミスを見逃さずにすむ。しかし、Linterは完璧ではない。ゆえに、警告を抑制したり修正したりする必要がある。
どうするべきか
まずはLinterが実行されていることを確認する。
問題を隠さなければ、不適切な警告は抑制してよい。警告を抑制する場合は行レベルでコメントを設定する。pylint
の場合は下記のようになる。
def do_PUT(self): # WSGI name, so pylint: disable=invalid-name
flake8
の場合は下記のようになる。
example = lambda: 'example' # noqa: E731
pylint
を利用する場合、警告はシンボル名で識別される。抑制理由がシンボル名から明らかでない場合は、説明を追加する。これにより、Linterの警告抑制を簡単に検索して再確認できる。
未使用の引数について
未使用引数の警告は、関数の先頭で変数を削除すると抑制できる。
def viking_cafe_order(spam: str, beans: str, eggs: str | None = None) -> str:
del beans, eggs # Unused by vikings.
return spam + spam + spam
この場合は、必ず「なぜ削除するのか」を説明するコメントを入れる。“Unused.“で十分。
未使用引数の警告を抑制する方法はほかにもある。
- 未使用の引数の識別子として’
_
‘を使う - 引数名の前に’
unused_
‘を付ける - ‘
_
‘に代入する
これらのスタイルは許可されるが、推奨されない。なぜなら、これらは引数を名前で渡す呼び出し元を破り、引数が実際に未使用であることを強制しないためである。