✅ 結論
None
の判定には ==
や !=
ではなく、
必ず is
/ is not
を使いましょう!
🎯 背景:こんな問題がありました
l = [1, 2, None, 3]
# 以下のように出力したい
1 2 10000 3
❌ よくある間違い
for i in l:
if i == None: # ← 一見よさそうだけど…
i = 10000
print(i, end=" ")
→ 一部のケースでは正しく動かないことがあります。
✅ 正しい書き方
for i in l:
if i is None:
i = 10000
print(i, end=" ")
🤔 なぜ == None
はNGなの?
Pythonでは ==
や !=
の挙動をクラス側でカスタマイズ(オーバーロード)できます。
少し深掘ると以下のようなことです。
-
__eq__
や__ne__
で==
や!=
の挙動のカスタマイズができる - そのカスタマイズによってNoneじゃないのに
== None
がTrueになることがある!
これは思わぬバグにつながるため、Noneとの比較は常に is
/ is not
を使うのが鉄則です。
🔗 参考リンク
📝 まとめ
比較方法 | 用途 | OK? |
---|---|---|
a == None |
値の等価性 | ❌ 避けるべき |
a is None |
オブジェクトの同一性 | ✅ 推奨 |
今後 None
を扱うときは、 isを使おうと思いました。