None の判定
None の判定 とは
None かどうかを is None で安全に判定する方法を学びます。本レッスンでは、None の判定 の基本から実際の使いどころまでを整理し、現場で迷わず使える形に落とし込みます。
None とは何か
Python の None は、「値がないこと」を表す特別な値 です。他の言語の null nil に相当します。型は NoneType で、Python 全体でただ 1 つのインスタンスしか存在しません。値が見つからなかったとき、関数が明示的に何も返さなかったとき、初期値として「まだ何も入っていない」状態を示したいときなど、いろいろな場面で登場します。
Python
result = None
print(result) # None
type(None) # <class 'NoneType'>
return文を持たない関数や、returnだけ書いて値を指定していない関数は、自動的にNoneを返す ことになっています。
is None と == None
None を判定するには、is None を使うのが推奨です。== も動きますが、is を使う方が 意図が明確で速い と覚えてください。
Python
value = None
value is None # True (推奨)
value == None # True (動くが非推奨)is は 同一オブジェクトかどうか を比べる演算子で、None のように 唯一のインスタンス を持つ値にはぴったりです。一方 == は __eq__ メソッドを呼ぶので、独自クラスが __eq__ を上書きしていると None でない値が None と等しいと判定される可能性があります。
Python 公式スタイルガイドの
PEP 8でもComparisons to singletons like None should always be done with is or is not, never the equality operators.と書かれています。
動きを追ってみる
値が None かどうかで分岐する典型例です。
Python
def get_label(name):
if name is None:
return '名前なし'
return namename が None のときだけ '名前なし' を返し、そうでなければそのまま name を返します。None チェックを最初に行う書き方は、本処理から分離されて見やすくなります。これは 早期 return (guard clause) と呼ばれるパターンの 1 つです。
None と falsy の違い
前のレッスンで bool(None) は False だと学びました。だからといって if not name: で None 判定をすると、name = 0 や name = '' のときも True になってしまいます。値が 本当に None か を確かめたいときは、if name is None: と明示的に書くのが安全です。
Python
def double(value):
if value is None:
return None
return value * 2この関数は 0 を渡すと 0 を返しますが、None を渡すと None を返します。if not value: で書いていたら 0 も None と同じ扱いになって、return None してしまうバグになります。
よくある間違い
None 判定でつまずきやすいポイントを 3 つ紹介します。
== Noneを使う 動きますが推奨されません。is Noneを使うと意図が伝わり、Linter にも怒られません。- truthy / falsy と混同する
0や''も falsy なので、if not value:だとNone以外も True になります。is Noneを使い分けます。 Noneを呼び出すresult = func()でresultがNoneのままresult.upper()などを呼ぶとAttributeErrorになります。属性アクセス前にis Noneで確認するか、default値を用意します。
エラーメッセージで
'NoneType' object has no attribute ...を見たら、ほぼ確実にNoneを意図せず受け取っているサインです。
Optional 型のヒント
型ヒントを書くときには Optional[int] という書き方をよく見ます。これは int または None のどちらかが入る、という意味です。最近の Python では int | None という記法も使えます。
Python
from typing import Optional
def find_user(user_id: int) -> Optional[str]:
if user_id == 1:
return 'Ada'
return None戻り値が None になりうる関数は、呼び出し側で is None チェックを忘れないようにしましょう。
やってみよう
引数 value を受け取り、それが None なら True、そうでなければ False を返す関数 is_none を実装してください。bool(value) ではなく、必ず is None を使ってください。return value is None の 1 行で書けます。テストでは None のほか 0 や空文字列 '' も渡されますが、これらは None ではないので False を返します。
よくある質問
Q. このトピックは Python 以外の言語でも同じ書き方ですか?
A. 考え方は他言語と共通ですが、構文や標準ライブラリは異なります。Python はインデントでブロックを表し、コロン + 改行で構造を作るのが特徴です。他言語に移行する際は基本概念を維持しつつ、構文の差分を意識して書き換えると混乱が少ないです。
Q. 実行してエラーが出た場合の対処は?
A. エラーメッセージの最後の行(TypeError や NameError などの型)から原因と該当行を確認します。Python はトレースバックが下から上に読むと「呼び出し元 → 内部」の順で辿れます。print や IDE のデバッガで途中の変数を確認すると原因が見えてきます。
Q. 次のステップで何を学ぶべきですか?
A. 本レッスンの内容を理解できたら、本文の「やってみよう」を実装し、章末クイズに進むのがおすすめです。さらに自分のミニアプリ(電卓・todo・スコア集計など)に応用するとスキルが定着します。詰まったら本文の H2 セクションに戻って読み返してください。
次のレッスン
次は f-string で文字列を組み立てる で、None かどうかを is None で安全に判定する方法を学びます を学びます。
事前確認 — 進む前に次の 3 つができることを確認しましょう。
- None 判定 の要点を自分の言葉で説明できる
- このレッスンの最小コード (または操作手順) を見ずに書ける
- 練習問題やクイズで間違えた箇所を読み直して理解した
理解度チェック (30 秒)
Q. None 判定 とは何か、1 文で説明してください。
A. 本文の「このレッスンで分かること」または冒頭の説明文を見直し、自分の言葉で要約できれば OK。詰まったら本レッスンの最初の H2 セクションを読み返してみましょう。
関連レッスン
要件
- is None 演算子を使って判定する
- == None や bool 変換ではなく is を使う
- value is None の結果を return で返す
入出力例
test-cases.txt
is_none(null) → true
is_none(0) → false
is_none("") → false
is_none(false) → false
is_none([]) → false
is_none("None") → false