Comment autoriser uniquement un entier positif en utilisant argparse [duplicate]

Nov 24 2020

Je l'ai là où si l'utilisateur n'entre pas un num2, il prendra 1 comme nombre par défaut. Cependant, j'essaie également d'implémenter où si l'utilisateur saisit un nombre, il doit être supérieur à 0.

import argparse
group = parser.add_mutually_exclusive_group()

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

J'ai regardé autour de moi et j'ai trouvé que choix = plages me permet de définir une plage pour le nombre, cependant, j'obtiens une erreur disant

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

Réponses

3 MinhNguyen Nov 24 2020 at 11:42

Vous pouvez utiliser typepour vérifier l'entrée entière positive comme suit:

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

Après avoir apporté quelques modifications aux paramètres, j'ai pu résoudre les problèmes. Je ne sais pas si c'est la même chose que tu veux

import argparse

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

Je viens de supprimer l'action et cela fonctionne bien. Je suis également nouveau sur python alors faites-moi savoir si ce n'est pas ce dont vous aviez besoin