flake8で「comparison to None should be ‘if cond is not None:’」はなぜ?どう直す?
今回はPythonの静的解析ツールであるflake8を使用したときに「comparison to None should be 'if cond is not None:’」とE711のエラーが出るのはなぜなのか、直すとしたらどう直せば良いのかについてご紹介いたします。
flake8で「comparison to None should be 'if cond is not None:’」はなぜ?どう直す?
結論から言うとflake8を使用したときに「comparison to None should be 'if cond is not None:’」と出る原因は、if文の条件分岐の中で変数について例えば「test_value」という変数があったときに
1 2 |
if test_value != None: pass |
で比較する代わりに
1 2 |
if test_value is not None: pass |
など、「==」や「!=」ではなく「〇〇 is None」や「〇〇 is not None」で比較しないといけないときに「comparison to None should be 'if cond is not None:’」とエラーメッセージが出ます。
大抵の場合は「==」や「!=」でも問題ないのですが、関数のオーバーライドによる「obj.__eq__()」の実装が「==」や「!=」に影響を与えるようです。
「obj.__eq__()」は「==」や「!=」の比較のときに呼び出され、「〇〇 is None」や「〇〇 is not None」の比較は呼び出されません。
よって、Noneで比べるときは「==」や「!=」の代わりに「〇〇 is None」や「〇〇 is not None」で比較した方が安全なため、こちらが推奨されます。
「〇〇 is None」や「〇〇 is not None」で比較して欲しいため、flake8でエラーが出るわけですね。
終わりに
今回はPythonの静的解析ツールであるflake8を使用したときに「comparison to None should be 'if cond is not None:’」とE711のエラーが出るのはなぜなのか、直すとしたらどう直せば良いのかについてご紹介いたしました。
ディスカッション
コメント一覧
まだ、コメントがありません