gpt4 book ai didi

python - nargs > 1 的位置参数的元组元变量值

转载 作者:行者123 更新时间:2023-11-28 16:55:45 25 4
gpt4 key购买 nike

似乎将元组设置为位置参数的 metavar 并请求帮助不起作用:

import argparse


parser = argparse.ArgumentParser()
parser.add_argument('size', type=int, nargs=2, help='size', metavar=('w', 'h'))

args = parser.parse_args()
print(args)

当作为 prog.py --help 调用时,这会产生错误。错误在 Python3 版本之间有所不同(我尝试了 3.5、3.6、3.8),包括 ValueError: too many values to unpack (expected 1)TypeError: sequence item 0: expected str instance, tuple发现See live example on Wandbox .

对于可选参数,一切都很好:

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('--size', type=int, nargs=2, help='size', metavar=('w', 'h'))

args = parser.parse_args()
print(args)

Live example on Wandbox .

是我的代码无效,还是我发现了 Python 实现中的错误?

请注意,简单地解析参数会按预期工作。

最佳答案

回溯的最后一部分是

/usr/lib/python3.6/argparse.py in _format_action_invocation(self, action)
550 if not action.option_strings:
551 default = self._get_default_metavar_for_positional(action)
--> 552 metavar, = self._metavar_formatter(action, default)(1)
553 return metavar
554

所以,是的,它专门发生在 positionals(空 option_strings)中。 metavar, = ... 分配仅适用于 RHS 返回一项。使用您的 metavar 它返回 2。

使用显示正常

In [36]: parser.print_usage()                                                   
usage: ipython3 [-h] w h

它看起来确实像一个错误。

(1) 参数告诉函数应该返回一个 1 元素的元组:

metavar, = self._metavar_formatter(action, default)(1)

我怀疑这个问题已经在 Python 错误/问题中提出。我稍后再找。


除了元变量,您还可以使用两个位置参数:

parser = argparse.ArgumentParser()
parser.add_argument('w', type=int)
parser.add_argument('h', type=int)

长期以来,这一直是一个已知错误 - 但到目前为止还没有采取任何措施:

https://bugs.python.org/issue14074

argparse allows nargs>1 for positional arguments but doesn't allow metavar to be a tuple

关于python - nargs > 1 的位置参数的元组元变量值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58541460/

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