简化的测试用例:
我有一个需要两个参数的脚本。第一个是整数列表。第二个是必须包含在第一个参数的整数集中的单个整数。
例如:
$ python argtest.py --valid_nums 1 2 3 --num 2
应该可以,但是:
$ python argtest.py --valid_nums 1 2 3 --num 4
不应该工作,因为num
is not in
valid_nums
。然而,我在实现这个功能时遇到了一些困难(阅读:我怀疑这比它的价值更麻烦,但我真的希望它能够工作)。
实施尝试:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--valid_nums',
type=int,
nargs='+')
args = parser.parse_args()
print "Numbers: ", args.valid_nums
parser.add_argument('--num',
type=int,
choices=args.valid_nums)
args = parser.parse_args()
print args
实际输出:
$ python argtesttest.py --valid_nums 1 2 3 --num 2
usage: argtesttest.py [-h] [--valid_nums VALID_NUMS [VALID_NUMS ...]]
argtesttest.py: error: unrecognized arguments: --num 2
期望的输出:
$ python argtesttest.py --valid_nums 1 2 3 --num 2
Namespace(num=2, valid_nums=[1, 2, 3])
现在,(我认为)这里的问题是,在调用后我无法向解析器添加新参数parse_args()
,这会产生有关无法识别的参数的错误,但我想不出解决方法。有没有什么方法可以打破参数的处理,使其不会同时处理?
显然,如果我只打电话,这将是非常微不足道的事情parse_args()
一次并处理了我自己检查的容器成员资格,但我想让它使用“本机”工作argparse
的内置错误检查。
有任何想法吗?