argparse [duplicate]を使用して正の整数のみを許可する方法

Nov 24 2020

ユーザーがnum2を入力しない場合、デフォルトの数値として1が使用される場所にあります。ただし、ユーザーが数値を入力する場合、0より大きくなければならない場所も実装しようとしています。

import argparse
group = parser.add_mutually_exclusive_group()

group.add_argument('-n2', '--num2', action='store_true', default=1, choices=range(0))

調べてみると、choices = rangesを使用すると数値の範囲を設定できることがわかりましたが、「

TypeError: __init__() got an unexpected keyword argument 'choices'

回答

3 MinhNguyen Nov 24 2020 at 11:42

type次のように、正の整数入力をチェックするために使用できます。

import argparse


def check_positive(value):
    try:
        value = int(value)
        if value <= 0:
            raise argparse.ArgumentTypeError("{} is not a positive integer".format(value))
    except ValueError:
        raise Exception("{} is not an integer".format(value))
    return value


parser = argparse.ArgumentParser(...)
parser.add_argument('--foo', type=check_positive)

args = parser.parse_args()
print('args: {}'.format(args.foo))
1 SachinRajput Nov 24 2020 at 11:45

パラメータを少し変更しただけで、問題を解決できました。これがあなたが望むものと同じかどうかはわかりませんが

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('-n2', '--num2',  default=1, type=int,choices=range(0))

アクションを削除したところ、正常に動作します。私もPythonを初めて使用するので、必要なものではない場合はお知らせください