「argparse」を使用してブール値を正確に解析するにはどうすればよいですか?

DDD
リリース: 2024-10-26 14:05:30
オリジナル
529 人が閲覧しました

How to Parse Boolean Values Accurately with `argparse`?

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

<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>
ログイン後にコピー

以上が「argparse」を使用してブール値を正確に解析するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!