在Python中,如何使用arg解析,只允许正整数?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (69)
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()

输出:

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

结果返回为负值:

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

我可以添加一个if来查看 args.games是负的,以便利用自动使用打印。

理想情况下,它将打印类似于此的内容:

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'

就像这样:

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'

自己找到的答案:

if args.games <= 0:
    parser.print_help()
    print "-g/--games: must be positive."
    sys.exit(1)
提问于
用户回答回答于
def check_positive(value):
    ivalue = int(value)
    if ivalue <= 0:
         raise argparse.ArgumentTypeError("%s is an invalid positive int value" % value)
    return ivalue

parser = argparse.ArgumentParser(...)
parser.add_argument('foo', type=check_positive)
用户回答回答于
parser.add_argument('foo', type=int, choices=xrange(5, 10))

扫码关注云+社区

领取腾讯云代金券