En Python, en utilisant argparse, autoriser uniquement les nombres entiers positifs

Le titre résume assez bien ce que j'aimerais voir se produire.

Voici ce que j'ai, et bien que le programme ne fait pas sauter sur un nonpositive entier, je veux que l'utilisateur soit informé que nonpositive entier est fondamentalement absurde.

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("-g", "--games", type=int, default=162,
                    help="The number of games to simulate")
args = parser.parse_args()

Et la sortie:

python simulate_many.py -g 20
Setting up...
Playing games...
....................

Sortie avec un négatif:

python simulate_many.py -g -2
Setting up...
Playing games...

Maintenant, évidemment, je pourrais juste ajouter un if pour déterminer if args.games est négatif, mais j'étais curieux de savoir si il y avait un moyen de piéger à la argparse niveau, afin de profiter de la correction automatique de l'utilisation de l'impression.

Idéalement, il aurait l'impression de quelque chose de similaire à ceci:

python simulate_many.py -g a
usage: simulate_many.py [-h] [-g GAMES] [-d] [-l LEAGUE]
simulate_many.py: error: argument -g/--games: invalid int value: 'a'

Comme suit:

python simulate_many.py -g -2
usage: simulate_many.py [-h] [-g GAMES] [-d] [-l LEAGUE]
simulate_many.py: error: argument -g/--games: invalid positive int value: '-2'

Pour l'instant je suis en train de faire cela, et je suppose que je suis heureux:

if args.games <= 0:
    parser.print_help()
    print "-g/--games: must be positive."
    sys.exit(1)
InformationsquelleAutor jgritty | 2013-01-02