Pythonのif文でNoneかどうかを判定する方法を現役エンジニアが解説【初心者向け】
初心者向けにPythonのif文でNoneかどうかを判定する方法について現役エンジニアが解説しています。NoneとはPythonでnullオブジェクトのことで、空っぽを意味します。if文でのNoneかどうかを判定する書き方や使い方を解説します。
テックアカデミーマガジンは受講者数No.1のプログラミングスクール「テックアカデミー」が運営。初心者向けにプロが解説した記事を公開中。現役エンジニアの方はこちらをご覧ください。 ※ アンケートモニター提供元:GMOリサーチ株式会社 調査期間:2021年8月12日~8月16日 調査対象:2020年8月以降にプログラミングスクールを受講した18~80歳の男女1,000名 調査手法:インターネット調査
監修してくれたメンター
清水 源一郎
テックアカデミーでは、Pythonコース、AIコース、データサイエンスコースを担当。
Pythonのif文でNoneかどうかを判定する方法について、テックアカデミーのメンター(現役エンジニア)が実際のコードを使用して初心者向けに解説します。
目次
そもそもPythonについてよく分からないという方は、Pythonとは何なのか解説した記事を読むとさらに理解が深まります。
今回は、Pythonに関する内容だね!
どういう内容でしょうか?
Pythonのif文でNoneかどうかを判定する方法について詳しく説明していくね!
お願いします!
この記事では、Pythonにおいて、if文を使ってオブジェクトが「nullオブジェクト」である「None」であるかどうかを判定する方法について解説します。
Noneとは
まず、Pythonにおける「None」とは、「値が存在しない状態」のことを表す組み込み定数です。
なお、他のプログラミング言語ではデータが存在しない場合は「null」という語句を使うこともあります。
例えば、辞書型オブジェクトについて、存在しないキーを指定したものをprint関数で出力してみます。
fruits = {1:"apple", 2:"lemon", 3:"melon"}
print(fruits.get(4))
すると、下記のように表示されます。
None
これは、指定したキーに対応する要素が「存在しない」ことを表す値として「None」が返されたことを意味します。
他の例として、正規表現を扱うreモジュールを使って文字列検索をする場合を紹介します。
import re
print(re.match('d', 'abc'))
上のコードは、文字列’abc’が’d’というパターンにマッチするかを判定しています。
この場合、2つの文字列は全く異なり、該当する箇所がないために「None」が返されます。
この他にも戻りが定義されていない関数の戻り値を出力した場合などにも「None」が見られます。
このように、何もないことを表す場合に、Noneが使用されます。
Noneかどうかを判定する方法
Pythonにおける処理のときには、Noneオブジェクトを使うとエラーが生じる場合もあります。
そのために、処理を行う前にNoneかどうかを確認する必要が生じてきます。
Noneを確認するためには、if文とis演算子を使います。
is演算子は2つのオブジェクトが一致しているかどうかを比較するための演算子で、次のように記述します。
オブジェクト is None
すると、以下のように返されます。
オブジェクトがNoneのとき→True オブジェクトがNoneでないとき→False
よって、以下のようにis演算子とif文を組み合わせて記述すれば、Noneをそのまま処理したときのエラーを回避できます。
if オブジェクト is None:
Noneだった場合の処理
else:
Noneでない場合の処理
None判定におけるisと==の違い
isによってNoneを判定する方法を紹介しましたが、通常2つのオブジェクトを比較する場合は比較の==演算子を使用することが多いです。
isと==の違いを紹介し、Noneの判定でisの使用が推奨される理由を紹介します。
Pythonでは、==はオブジェクトの値同士が同じであるか(同値性)を比較し、isはオブジェクト自体が同じものであるか(同一性)を比較します。
例えば、以下のような同じ中身のリストがあります。
list1 = [1, 2, 3]
list2 = [1, 2, 3]
print(list1 == list2)
print(list1 is list2)
結果は下記の通りです。
True False
==では、2つのリストの要素がまったく同じであるため、Trueが返されます。
一方で中身が同じでもlist1, list2という別のオブジェクトであるため、isで判定した場合はFalseになります。
また、==での同値性の判定基準はクラスによって変わる場合があり、判定はisのほうが高速である特徴があります。
Noneかどうかを判定したい場合は、判定の厳密性や処理速度の面からisの使用が推奨されます。
実際に書いてみよう
それでは、実際にコードを書いて、Noneであるかどうかを確認してみましょう。
サンプルプログラムでは、辞書のキーに対して、存在するキーを指定した場合は対応する値を大文字にして表示し、存在しないキーを指定した場合「そのようなデータは存在しません。」と表示する処理を行う関数を作成します。
サンプルコード
#辞書の定義
fruits = {1: 'apple', 2: 'lemon', 3: 'melon'}
#関数の定義
def func(i):
if fruits.get(i) is None:
print("そのようなデータは存在しません。")
else:
print(fruits.get(i).upper())
#キーが存在する場合
func(1)
#ーが存在しない場合
func(5)
出力結果
APPLE そのようなデータは存在しません。
このように、Noneであるかどうかをif文で確認することによって、値が存在しない場合の処理を分けることができます。
NoneはNoneTypeのオブジェクトのため、文字列型の要素と同じように扱おうとするとエラーになってしまうことが多いです。
例えば、先ほどのサンプルコードでNoneだった場合の処理を用意しなかった場合を見てみます。
サンプルコード
fruits = {1: 'apple', 2: 'lemon', 3: 'melon'}
def func2(i):
print(fruits.get(i).upper())
func2(5)
出力結果
AttributeError: 'NoneType' object has no attribute 'upper'
AttributeErrorが送出され、エラーとなります。
このように、存在しない場合の処理を別に用意しておくことでエラーの回避にもつながります。
まとめ
この記事では、Pythonにおける「None」を確認する方法について解説しました。
Noneの扱い方について慣れておけば、エラーの解決に役立つのでぜひ見つけてください。
内容が分かりやすくて良かったです!
ゆかりちゃんも分からないことがあったら質問してね!
分かりました。ありがとうございます!
Pythonを学習中の方へ
これで解説は終了です、お疲れさまでした。
- つまずかず「効率的に」学びたい
- 副業や転職後の「現場で使える」知識やスキルを身につけたい
プログラミングを学習していて、このように思ったことはありませんか?
テックアカデミーのPythonコースでは、第一線で活躍する「プロのエンジニア」が教えているので、効率的に実践的なスキルを完全オンラインでしっかり習得できます。
合格率10%の選考を通過した、選ばれたエンジニアの手厚いサポートを受けながら、人工知能(AI)や機械学習の基礎を学べます。
まずは一度、無料体験で学習の悩みや今後のキャリアについて話してみて、「現役エンジニアから教わること」を実感してみてください。
時間がない方、深く知ってから体験してみたい方は、今スグ見られる説明動画から先に視聴することをおすすめします!