argparse-可选参数要求2个值或不要求 [英] argparse -- requiring either 2 values or none for an optional argument

查看:298
本文介绍了argparse-可选参数要求2个值或不要求的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试为脚本提供一个可选参数,该脚本可以不带任何值或2个值,别无其他.您可以使用argparse完成此操作吗?

I'm trying to make an optional argument for a script that can either take no values or 2 values, nothing else. Can you accomplish this using argparse?

# desired output:
# ./script.py -a --> works
# ./script.py -a val1 --> error
# ./script.py -a val1 val2 --> works


版本1-接受0或1个值:


version 1 -- accepts 0 or 1 values:

parser = argparse.ArgumentParser()
parser.add_argument("-a", "--action", nargs="?", const=True, action="store", help="do some action")
args = parser.parse_args()

# output:
# ./script.py -a --> works
# ./script.py -a val1 --> works
# ./script.py -a val1 val2 --> error


版本2-恰好接受2个值:


version 2 - accepts exactly 2 values:

parser = argparse.ArgumentParser()
parser.add_argument("-a", "--action", nargs=2, action="store", help="do some action")
args = parser.parse_args()

# output:
# ./script.py -a --> error
# ./script.py -a val1 --> error
# ./script.py -a val1 val2 --> works


您如何组合这2个不同的版本,以便脚本接受0或2个值作为参数,而当脚本只有1个值时将其拒绝?


How do you combine these 2 different versions so that the script accepts 0 or 2 values for the argument, but rejects it when it only has 1 value?

推荐答案

您必须在此处进行自己的错误检查.接受0或更大的值,并拒绝0或2以外的任何值.

You'll have to do your own error checking here. Accept 0 or more value, and reject anything other than 0 or 2:

parser = argparse.ArgumentParser()
parser.add_argument("-a", "--action", nargs='*', action="store", help="do some action")
args = parser.parse_args()

if args.action is not None and len(args.action) not in (0, 2):
    parser.error('Either give no values for action, or two, not {}.'.format(len(args.action)))

请注意,当不使用-a开关时,args.action设置为None:

Note that args.action is set to None when no -a switch was used:

>>> import argparse
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument("-a", "--action", nargs='*', action="store", help="do some action")
_StoreAction(option_strings=['-a', '--action'], dest='action', nargs='*', const=None, default=None, type=None, choices=None, help='do some action', metavar=None)
>>> args = parser.parse_args([])
>>> args.action is None
True
>>> args = parser.parse_args(['-a'])
>>> args.action
[]

这篇关于argparse-可选参数要求2个值或不要求的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆