None の判定

生田 陸人
LuaGate エンジニア / 現役エンジニア
編集 LuaGate編集部

None の判定 とは

None かどうかを is None で安全に判定する方法を学びます。本レッスンでは、None の判定 の基本から実際の使いどころまでを整理し、現場で迷わず使える形に落とし込みます。

None とは何か

PythonNone は、「値がないこと」を表す特別な値 です。他の言語の 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 name

nameNone のときだけ '名前なし' を返し、そうでなければそのまま name を返します。None チェックを最初に行う書き方は、本処理から分離されて見やすくなります。これは 早期 return (guard clause) と呼ばれるパターンの 1 つです。

diagram (will load when visible)

None と falsy の違い

前のレッスンで bool(None)False だと学びました。だからといって if not name:None 判定をすると、name = 0name = '' のときも 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: で書いていたら 0None と同じ扱いになって、return None してしまうバグになります。

よくある間違い

None 判定でつまずきやすいポイントを 3 つ紹介します。

  1. == None を使う 動きますが推奨されません。is None を使うと意図が伝わり、Linter にも怒られません。
  2. truthy / falsy と混同する 0'' も falsy なので、if not value: だと None 以外も True になります。is None を使い分けます。
  3. None を呼び出す result = func()resultNone のまま 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 つができることを確認しましょう。

  1. None 判定 の要点を自分の言葉で説明できる
  2. このレッスンの最小コード (または操作手順) を見ずに書ける
  3. 練習問題やクイズで間違えた箇所を読み直して理解した

理解度チェック (30 秒)

Q. None 判定 とは何か、1 文で説明してください。

この章のポイント

A. 本文の「このレッスンで分かること」または冒頭の説明文を見直し、自分の言葉で要約できれば OK。詰まったら本レッスンの最初の H2 セクションを読み返してみましょう。

関連レッスン

要件

  1. is None 演算子を使って判定する
  2. == None や bool 変換ではなく is を使う
  3. 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

ヒント

main.py
main.py
学習モード

メモ

None の判定

⌘S で保存