Python の argparse でブール引数を適切に処理する方法は?

Susan Sarandon
リリース: 2024-10-28 08:11:30
オリジナル
477 人が閲覧しました

How to Properly Handle Boolean Arguments with argparse in Python?

argparse でのブール引数の処理

コマンド ラインからの引数の解析は、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 サイトの他の関連記事を参照してください。

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