如何验证传递的参数总数?

时间:2015-08-21 18:31:36

标签: python command-line-arguments argparse

使用argparse时,我需要确保用户输入两个字符串。但是,它们有两种可能的选择来输入字符串,例如选项-a-b。他们应该能够做以下任何事情:

python runscript.py -a str1 str2
python runscript.py -a str1 -b str2
python runscript.py -b str1 str2

关键是必须只有两个输入,但它们可以用于任何可用的选项。

我的尝试基本上设置了这样的参数

parser.add_argument('-a', nargs='*')
parser.add_argument('-b', nargs='*')

然后我必须这样做:

if (args.a): num_a = len(args.a)    # I need to check if the -a option was even used
else: num_a = 0

if (args.b): num_b = len(args.b)    # same as above but for -b option
else: num_b = 0

# Check that number of arguments is correct 
if (num_a + num_b) != 2:
    <error code>

这看起来有点无关紧要。有更多的Pythonic方式吗?

1 个答案:

答案 0 :(得分:4)

为两个参数提供默认的列表值:

parser.add_argument('-a', nargs='*', default=[])
parser.add_argument('-b', nargs='*', default=[])

现在值始终将成为一个列表,简化了错误检查:

if len(args.a) + len(args.b) != 2:
    parser.error('....')