如何验证传递参数的总数?
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('....')
在使用 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('....')