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

방금 작업을 제거했는데 제대로 작동합니다. 나는 또한 파이썬을 처음 사용하므로 필요한 것이 아닌지 알려주십시오.