「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > argparse でブール値を正しく解析するにはどうすればよいですか?

argparse でブール値を正しく解析するにはどうすればよいですか?

2024 年 11 月 23 日に公開
ブラウズ:293

How Can I Parse Boolean Values Correctly in argparse?

argparse を使用したブール値の解析

argparse では、ブール値のコマンドライン引数を解析するのは一般的なタスクですが、これを試みるときによくある落とし穴が発生します。 type=bool 引数を使用して、「--foo True」または「--foo False」のような値を解析します。驚くべきことに、空の文字列を引数として使用する場合でも (例: "--foo " ")、解析された値は True と評価されます。

正しいブール解析のために、argparse は 2 つの推奨アプローチを提供します。

正規のアプローチ:

「--機能」を使用し、 '--no-feature' 構文。Python 3.9 以降ではネイ​​ティブにサポートされています:

parser.add_argument('--feature', action=argparse.BooleanOptionalAction)

以下の 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)

このアプローチでは、「--feature」の存在により値が True に設定され、「--no-feature」の存在により値が False に設定されます。どちらの引数も省略すると、デフォルトで True になります。

オプションのアプローチ (型変換を使用):

「--arg 」構文が必要な場合、カスタム型変換関数を使用できます。一例は、ast.literal_eval:

parser.add_argument("--arg", type=ast.literal_eval)

です。または、ユーザー定義関数を作成することもできます。

def true_or_false(arg):
    ua = str(arg).upper()
    if 'TRUE'.startswith(ua):
       return True
    elif 'FALSE'.startswith(ua):
       return False
    else:
       raise argparse.ArgumentTypeError('Invalid boolean value')
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3