1. ホーム
  2. python

[解決済み] argparseによるブーリアン値のパース

2022-01-29 05:15:48

質問

argparseを使って、"-foo True" または "-foo False" として書かれたブール値のコマンドライン引数をパースしたいと思います。例えば

my_program --my_boolean_flag False

しかし、以下のテストコードでは、私が望むようなことはできません。

import argparse
parser = argparse.ArgumentParser(description="My parser")
parser.add_argument("--my_bool", type=bool)
cmd_line = ["--my_bool", "False"]
parsed_args = parser.parse(cmd_line)

悲しいかな parsed_args.my_bool は次のように評価されます。 True . を変更しても同様です。 cmd_line["--my_bool", ""] というのは驚くべきことです。 bool("") に評価されます。 False .

どうすれば argparse にパースさせることができますか? "False" , "F" であり、それらの小文字の変形は False ?

解決方法は?

これは実は時代遅れなんです。Python 3.7+用です。 Argparse が boolean 引数をサポートするようになりました。 (BooleanOptionalAction を検索してください)。

実装はこのようになります。

import argparse

ap = argparse.ArgumentParser()

# List of args
ap.add_argument('--foo', default=True, type=bool, help='Some helpful text that is not bar. Default = True')

# Importable object
args = ap.parse_args()

もう一つ言及しておくと、これは argparse.ArgumentTypeError によって、引数の True と False 以外のすべてのエントリーをブロックします。何らかの理由でこれを変更したい場合は、このためのカスタムエロークラスを作成することができます。