◾️はじめに
Python の bool については
https://dk521123.hatenablog.com/entry/2021/10/02/000000
でやったが、別の問題でハマったので、 この際だから、今回は、Pythonの bool を扱う際の注意事項について まとめてみようと思う。
目次
【0】前提知識:Pythonの bool の正体 【1】型判定でisinstance() を使った際の注意 1)isinstanceを使った場合(NG動作) 2)typeを使った場合(OK動作) 【2】文字列 => bool に変換する際の注意点
【0】前提知識:Pythonの bool の正体
https://note.nkmk.me/python-bool-true-false-usage/#booltruefalse1-0
より抜粋 〜〜〜〜 True, Falseはそれぞれ1, 0と等価。 〜〜〜〜
https://docs.python.org/ja/3/c-api/bool.html
Python の Bool 型は整数のサブクラスとして実装されています。
【1】型判定でisinstance() を使った際の注意
https://dev.classmethod.jp/articles/python-isinstance-or-type/
にも記載されているが、「isinstance(is_bool, int)」だと正しく判定されない
理由
* 冒頭で書いた通り「Python の Bool 型は整数のサブクラス」だから。
1)isinstanceを使った場合(NG動作)
is_bool = True if isinstance(is_bool, int): print("int") # ★こっちにくる else: print("Not int") print("************") is_number = 1 if isinstance(is_number, bool): # ★これだとOK print("bool") else: print("Not bool") # ★こっちにくる
2)typeを使った場合(OK動作)
is_bool = True if type(is_bool) == bool: print("bool") # ★こっちにくる else: print("Not bool") print("************") is_number = 1 if type(is_number) == bool: print("bool") else: print("Not bool") # ★こっちにくる
【3】文字列 => bool に変換する際の注意点
* bool("<String>")でも boolへの変換は可能だが 以下の「意図した動作にならなかった例」のように bool('False') は Trueになってしまう。 => bool() の仕様として、以下のようになるため。 + True : 空でない文字列str型すべて + False : 空文字列
意図した動作にならなかった例
xxx = "False" is_xxx = bool(xxx) # is_xxx = True (!!!???) print(f"is_xxx = {is_xxx}")
関連記事
Python ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2014/08/07/231242
Python ~ 基本編 / 文字列 ~
https://dk521123.hatenablog.com/entry/2019/10/12/075251
Python ~ 基本編 / bool ~
https://dk521123.hatenablog.com/entry/2021/10/02/000000
Python ~ 基本編 / CSV ~
https://dk521123.hatenablog.com/entry/2019/11/07/214108
Python ~ 基本編 / 辞書・あれこれ ~
https://dk521123.hatenablog.com/entry/2020/10/11/000000