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は比較的取り組みやすい言語と言われていますが、プログラミング初心者にとっては分からないことだらけ。
ゼロから独学で勉強するのは厳しい道のりです。
今回、様々な現場、システム、言語を経験してきた現役エンジニアの立場から、初心者でも挫折しない学習方法を解説する記事を書きました。もちろん、お金をかけずに習得できる方法も解説しています。
できるだけストレスがかからない勉強法を解説しているので、ぜひ参考にしてみてくださいね。