Python Tech

[初心者向け] Python if 文で変数に何も入っていないか検証する方法

Python初心者が理解しやすい、基本のキから解説するシリーズ。

今回は if 条件式で、変数を中身に応じて検証し、処理を分ける方法を解説しています。

  • 変数に何も入っていないか(None、いわゆるnull)検証したい
  • 文字列型の長さが0かどうか検証したい
  • そもそも変数が存在するか?検証したい

これらを実現できる「if 文の条件判定」について現役のエンジニアが解説しています。

 

結論

  • 変数がNone(いわゆるnull)か判定したいとき
a = None
if a is None:
    print("None type")
else:
    print("not None type")
# None type

 

  • 変数(文字列str型)が空文字(長さ0)か判定したいとき
s = ''
if not s:
    print("blank")
else:
    print("not blank")
# blank

 

  • そもそも変数が定義されていないかを検証したいとき

変数var_x が定義されていないのにアクセスしようとするとNameErrorが発出されるので、例外処理でキャッチします。

try:
    var_x
except NameError:
    print("not defined!")

 

実行環境

Python 3.9.2

 

変数がNone(いわゆるnull)か判定

Pythonの世界では、変数に値が入っていないnull の状態をNoneと表現します。

Noneが入れられた変数はNoneTypeという専用の型になります。

ある変数がNoneかどうかを判定するには、if 文でis演算子を使って次のようにします。

a = 0
if a is None:
    print("None type")
else:
    print("not None type")
# not None type
a = None
if a is None:
    print("None type")
else:
    print("not None type")
# None type

 

ちなみに、以下のようなif not 変数 というコードでも変数がNoneかどうかは判定できそうですが、これは誤りです。

 

a = 0
if not a:
    print("None ?")
else:
    print("not None ?")
# None ?

 

if not は変数がTrue(正)かFalse(偽)を判定するための判定式です。

Pythonの世界ではNoneはFalseになると決められているので、if 判定式を満たします。なので一見ちゃんと判定できていそうですが、他にもFalseとなる値があるため、それらとNoneの区別が付きません。

  • False (bool型)
  • 0 (int型)
  • [] (空要素のlist型)
  • "" (str型の空文字)

変数がNoneか、None以外かを正しく判定するには、if 変数 is None: のようにis演算子を使用しましょう。

 

変数(文字列str型)が空文字(長さ0)か判定

str型の変数が空の文字列であるかどうかを判定するには、次のようにします。

 

s = ''
if not s:
    print("blank")
else:
    print("not blank")
# blank

 

もしくは、文字列の長さが0かどうかを判定しても同じ結果が得られます。

 

s = ''
if len(s) == 0:
    print("empty")
else:
    print("not empty")
# empty

 

状況に応じて、理解しやすい方を選べばよいでしょう。

文字列の長さが0がFalseとなるのはPythonの仕様です。上のサンプルコードでは それを利用してif not 変数 文で判定しています。

 

そもそも変数が定義されていないかを検証

変数を定義していない(値を一度も入れていない)のに、その変数を参照しようとすると、PythonではNameErrorという例外が発生します。

これを利用する形で、変数が存在するかどうかを検証してみましょう。

 

try:
    var_x
    print("OK!")
except NameError:
    print("not defined!")

 

ここでは例外処理try~excep文、いわゆるtry/catch文です)を実装して、try文の中で例外が発生したときにはexcept 文でそれを補足します。

上記の例では、var_x は定義されないまま2行目で参照を試みていますから NameError が発生します。そのままだと通常はプログラムの異常終了になりますが、except NameError文が例外をキャッチ(補足)し、中のprint()文が実行されます。

もし事前にvar_xが定義されていて、値も参照できる状況なら例外は発生しません。この場合は3行目のprint("OK!")が実行されるのです。

以上で、変数の存在(定義の有無)が確認できました。

 

Pythonの学習法について

Python の勉強が辛くなっていませんか?

Pythonは比較的取り組みやすい言語と言われていますが、プログラミング初心者にとっては分からないことだらけ。

ゼロから独学で勉強するのは厳しい道のりです。

今回、様々な現場、システム、言語を経験してきた現役エンジニアの立場から、初心者でも挫折しない学習方法を解説する記事を書きました。もちろん、お金をかけずに習得できる方法も解説しています。

できるだけストレスがかからない勉強法を解説しているので、ぜひ参考にしてみてくださいね。

 

今回参考にしたページ・資料

6.10. 比較 — Python 3.9.4 ドキュメント

  • この記事を書いた人

次世代ペンギン

長いのでペンギンとお呼びください。システム開発・プログラミングのお仕事をしています。甘味とコーヒーは生命線。多くの人に役立つ情報のシェアが目標です。

人気の記事

1

会社員でプログラマーとして働いている人、インフラやネットワークのエンジニアとして働いている人の中には、フリーランスのプログラマーとして独立、もしくは転向したい人もいるので ...

2

キャリアアップのため、または高収入を目指して、しっかりプログラミングを学びたいという人が増えてきましたね。 この記事では現役のエンジニアである私が、実際に仕事で稼げるよう ...

3

フリーランスのプログラマーにとって収入の向上に最も直結するのはスキルです。 必要なスキル、スキルの獲得方法が気になる人も多いでしょう。 また、これからフリーランスを目指す ...

4

Vuetifyの v-progress-circular コンポーネントは、数値データや処理状況を環状(円状)のデザインで教えてくれるUIデザインです。 ローディングのス ...

5

Vuexのstore(ストア)を使うと、各コンポーネント間で個別にデータのやり取りすることなく、データを一元的に管理できます。Vueでは欠かせない機能といえるでしょう。 ...

-Python, Tech
-,

© 2021 ペンギンのーと