gpt4 book ai didi

python - Argparse nargs ="+"正在吃位置参数

转载 作者:太空宇宙 更新时间:2023-11-04 08:50:12 24 4
gpt4 key购买 nike

这是我的解析器配置的一部分

parser.add_argument(
'infile', help="The file to be imported",
type=argparse.FileType('r'), default=sys.stdin
)

parser.add_argument(
'--carpark', nargs='+', dest='CarparkID', type=int, default=[],
help="One or many carpark IDs"
)

但是,--carpark 参数似乎过于贪婪并且吃掉了它后面的任何:

$ mycommand --carpark 17 ~/path-to-file
mycommand: error: argument --carpark: invalid int value: '/home/oli/path-to-file'

解决此类问题的好方法是什么?我需要将整数 ID 列表传递到命令中,但也需要一个位置文件(也可以是标准输入)。

例如,是否有一个非贪婪的 nargs 选项,它只会解析尽可能多的有意义的内容?

最佳答案

如果您想指定多个 parking 场 ID,我会做以下两件事之一,而不是使用 nargs='+':

  1. 每个 ID 使用该选项一次(mycommand --carpark 17 --carpark 18)

    parser.add_argument('--carpark',
    dest='carpark_ids',
    type=int,
    action='append',
    default=[],
    help="One carpark ID (can be used multiple times)"
    )
  2. 取一个逗号分隔的参数(mycommand --carpark 17,18)

    def intlist(s):
    rv = []
    for x in s.split(','):
    try:
    x = int(x)
    except ValueError:
    raise ArgumentTypeError("Non-integer carpark id {x}" % (x,))
    rv.append(x)
    return rv

    parser.add_argument('--carpark',
    type=intlist,
    dest='carpark_ids',
    default=[],
    help="One or more carpark IDs"
    )

    再做一些工作,您可以修改它以允许多次使用 --carpark 以将其所有值累积到一个列表中。

第三种选择,我不是特别喜欢,是放弃位置参数,将其设为可选参数。 (mycommand --carpark 17 18 --infile ~/path-to-file)。

parser.add_argument('--infile',
help="The file to be imported",
type=argparse.FileType('r'),
default=sys.stdin
)

parser.add_argument('--carpark',
nargs='+',
dest='CarparkID',
type=int,
default=[],
help="One or many carpark IDs"
)

关于python - Argparse nargs ="+"正在吃位置参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36328769/

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