コマンド ラインからの引数の解析は、Python の argparse モジュールを使用して簡素化できます。ブール値フラグの解析をサポートしていますが、特定のシナリオでは予期しない結果が生じる可能性があります。
「--foo True」または「--foo False」のようなブール値を正しく解析するには、argparse のデフォルトの動作では十分ではない場合があります。たとえば、引数が「False」または空の文字列に設定されている場合、type=bool を単独で使用すると、予期しない結果が生じる可能性があります。
解決策の 1 つは、Python 3.9 で導入された BooleanOptionalAction を利用することです。このアクションにより、ブール値がより直観的に処理され、True、t、y、yes、1 が True に、False、f、n、no、0 が False に自動的に変換されます。
以前の Python バージョンの場合3.9 では、回避策として、「store_true」アクションと「store_false」アクションを組み合わせる必要があります。 「store_true」アクションは、フラグが存在する場合は True に設定し、「store_false」アクションはフラグを False に設定します。デフォルトでは、フラグは True とみなされ、ユーザーは肯定フラグと否定フラグの両方を指定できます。
<code class="python">import argparse parser = argparse.ArgumentParser(description="My parser") parser.add_argument('--feature', action='store_true') parser.add_argument('--no-feature', dest='feature', action='store_false') parser.set_defaults(feature=True) cmd_line = ["--no-feature"] parsed_args = parser.parse_args(cmd_line) if parsed_args.feature: print("Feature is True.") else: print("Feature is False.")</code>
または、特定の解析ロジックを処理するカスタム関数を定義できます。たとえば、大文字と小文字を区別せずに "True" と "False" を区別する関数:
<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: raise ValueError("Invalid argument: {}".format(arg))</code>
この関数は、argparse の type パラメーターとともに使用できます:
<code class="python">import argparse parser = argparse.ArgumentParser(description="My parser") parser.add_argument('--my_bool', type=t_or_f) cmd_line = ["--my_bool", "False"] parsed_args = parser.parse_args(cmd_line) if parsed_args.my_bool: print("my_bool is True.") else: print("my_bool is False.")</code>
以上がPython の argparse でブール引数を適切に処理する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。