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」という変数があったときに

で比較する代わりに

など、「==」や「!=」ではなく「〇〇 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のエラーが出るのはなぜなのか、直すとしたらどう直せば良いのかについてご紹介いたしました。

最後までお読みいただきありがとうございます。
よろしければブログやTwitterでのシェアをお願いしております。
コメントもお待ちしております。
誤植や勘違いなどございましたらコメント欄にて教えていただけると幸いです。

直接契約ができるフリーランスエージェント「エンハンス」を立ち上げました。
詳しくは下記LPをご参照ください。
https://enhance.decryption.co.jp/

Youtubeチャンネル開設いたしました。
チャンネル登録者10,000人を目指しているので、良いと思った方はチャンネル登録をお願いしたいです。
https://www.youtube.com/channel/UC219XhmSRxmXltTy6COxSMw






Python

Posted by ちこ