gpt4 book ai didi

python - argparse——可选参数需要 2 个值或没有

转载 作者:太空狗 更新时间:2023-10-29 20:47:22 26 4
gpt4 key购买 nike

我正在尝试为脚本创建一个可选参数,该参数可以不带任何值或 2 个值,仅此而已。你能用 argparse 完成这个吗?

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


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

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 个值:

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 个值时拒绝它?

最佳答案

您必须在此处进行自己的错误检查。接受 0 个或多个值,并拒绝 0 或 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:

>>> 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
[]

关于python - argparse——可选参数需要 2 个值或没有,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30944976/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com