質問:
argparse を使用してブール値のコマンドライン引数を解析するときに、なぜ値が解析されるのか「--foo False」のように、False ではなく True と評価されますか?
答え:
正規メソッド:
推奨されるアプローチは、次の形式を使用することです:
command --feature
機能を無効にする場合は、次を使用します:
command --no-feature
argparse は、これに対する組み込みサポートを提供します:
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)
カスタム解析の代替方法:
「--foo True/False」形式が優先される場合は、オプションは、ast.literal_eval またはカスタム関数をタイプとして使用することです:
import ast def t_or_f(arg): ua = str(arg).upper() if 'TRUE'.startswith(ua): return True elif 'FALSE'.startswith(ua): return False else: pass # Handle error condition appropriately
<code class="python">parser.add_argument("--my_bool", type=ast.literal_eval) parser.add_argument("--my_bool", type=t_or_f)</code>
このカスタム関数は、大文字の True/False をブール値として解釈し、これらの値の柔軟な解析を可能にします。
以上がargparse でブール引数を解析すると、「--foo False」が True と評価されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。