argparse でブール値を解析する 質問する

argparse でブール値を解析する 質問する

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

"False"argparseで、、"F"およびそれらの小文字の変形を として解析するにはどうすればよいでしょうかFalse?

ベストアンサー1

より標準的な方法は次の通りだと思います:

command --feature

そして

command --no-feature

argparseこのバージョンをうまくサポートします:

Python 3.9以上:

parser.add_argument('--feature', action=argparse.BooleanOptionalAction)

Python < 3.9:

parser.add_argument('--feature', action='store_true')
parser.add_argument('--no-feature', dest='feature', action='store_false')
parser.set_defaults(feature=True)

もちろん、バージョンが本当に必要な場合は、 「タイプ」またはユーザー定義関数として--arg <True|False>渡すこともできます...ast.literal_eval

def t_or_f(arg):
    ua = str(arg).upper()
    if 'TRUE'.startswith(ua):
       return True
    elif 'FALSE'.startswith(ua):
       return False
    else:
       pass  #error condition maybe?

おすすめ記事