■ はじめに
文字列からbool に変換する際に 【1】の「意図した動作にならなかった例」のように 実装したが、うまくいかなかったので、メモっておく。
目次
【1】文字列 => bool に変換する際の注意点 【2】文字列 => bool に変換 1)補足:distutilsパッケージ
【1】文字列 => 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}")
【2】文字列 => bool に変換
# 簡易版 import os # <受ける変数> = "<対象文字列>".lower() == "true" # => 小文字にしてから、"true"と比較するだけ is_dry_run = os.getenv("DRY_RUN", "false").lower() == "true"
1)補足:distutilsパッケージ
* python 標準パッケージ * 公式API仕様には以下の記載されているので、 非推奨になりそうな予感 => 追記(2024/05/23):案の定、Python3.12 で廃止になった
https://docs.python.org/ja/3.10/distutils/index.html
より抜粋 ~~~~~~ 注釈 distutils パッケージ全体の使用は非推奨 (deprecated) であり、 Python 3.12 で削除されます。 この文書は参照のために維持されており、パッケージとともに削除されます。 ~~~~~~
https://docs.python.org/ja/3/distutils/apiref.html#distutils.util.strtobool
より抜粋
distutils.util.strtobool(val)
真偽値をあらわす文字列を真(1)または偽(0)に変換します。 真の値は y, yes, t, true, on そして 1 です。 偽の値は n, no, f, false, off そして 0 です。 val が上のどれでもない時は ValueError を起こします。
サンプル
from distutils.util import strtobool # ex1. False xxx = "False" is_xxx = strtobool(xxx) == 1 # is_xxx = False print(f"is_xxx = {is_xxx}") # ex2. True xxx = "True" is_xxx = strtobool(xxx) == 1 # is_xxx = True print(f"is_xxx = {is_xxx}")
参考文献
https://note.nkmk.me/python-bool-true-false-usage/
関連記事
Python ~ 基本編 / 文字列 ~
https://dk521123.hatenablog.com/entry/2019/10/12/075251
Python ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2014/08/07/231242