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
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