Como permitir apenas números inteiros positivos usando argparse [duplicado]

Nov 24 2020

Eu tenho para onde, se o usuário não inserir um num2, terá 1 como um número padrão. No entanto, também estou tentando implementar onde, se o usuário inserir um número, ele deve estar acima de 0.

import argparse
group = parser.add_mutually_exclusive_group()

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

Eu olhei em volta e descobri que escolhas = intervalos me permite definir um intervalo para o número, no entanto, recebo um erro dizendo

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

Respostas

3 MinhNguyen Nov 24 2020 at 11:42

Você pode usar typepara verificar a entrada de número inteiro positivo da seguinte maneira:

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

Depois de fazer algumas alterações nos parâmetros, consegui resolver os problemas. Não tenho certeza se isso é a mesma coisa que você quer

import argparse

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

Acabei de remover a ação e funciona bem. Eu também sou novo em python, então deixe-me saber se não é o que você precisava