argparse を使用したブール値の解析
argparse を使用してブール コマンドライン引数を解析する場合、望ましい動作が異なるシナリオに遭遇するのが一般的です。実際の出力から。この問題は、引数が「--foo True」または「--foo False」として指定されている場合に発生します。
この問題に対処するには、コードをさらに詳しく調べることが重要です。
<code class="python">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)</code>
驚くべきことに、引数として「False」を指定したにもかかわらず、parsed_args.my_bool は True と評価されます。この異常は、cmd_line が ["--my_bool", ""] に変更された場合にも発生し、論理的に False と評価されるはずです。
解決策
この課題を克服するにはブール値を正確に解析するには、より従来のスタイルを採用することをお勧めします。
command --feature
and
command --no-feature
argparse は、次の形式を簡単にサポートします。
Python 3.9 以降:
<code class="python">parser.add_argument('--feature', action=argparse.BooleanOptionalAction)</code>
Python 3.9 未満:
<code class="python">parser.add_argument('--feature', action='store_true') parser.add_argument('--no-feature', dest='feature', action='store_false') parser.set_defaults(feature=True)</code>
あるいは、「--arg 以上が「argparse」を使用してブール値を正確に解析するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。<code class="python">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?</code>