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

How do I validate the total number of passed arguments?

在使用 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 的方式来做到这一点?

给两个参数一个默认的列表值:

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

现在值总是将成为一个列表,简化您的错误检查:

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