将元组设置为$finalArray=[];
for($i=0;$i<count($lnk);$i++){
$finalArray[] = ['url'=>$lnk[$i]['url'], 'img'=>$img[$i]['img']];
}
作为位置参数并请求帮助似乎无效:
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)
时会产生错误。错误在Python3版本(我尝试过3.5、3.6、3.8)之间有所不同,并且包含prog.py --help
或ValueError: too many values to unpack (expected 1)
。 See live example on Wandbox。
对于可选参数,一切都很好:
TypeError: sequence item 0: expected str instance, tuple found
我的代码无效还是在Python实现中发现了错误?
请注意,仅解析参数即可按预期工作。
答案 0 :(得分:1)
回溯的最后一部分是
/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错误/问题中提出。我待会儿找到。
您也可以使用两个位置参数来代替metavar:
parser = argparse.ArgumentParser()
parser.add_argument('w', type=int)
parser.add_argument('h', type=int)
很长一段时间以来,这是一个已知的错误-但到目前为止没有采取任何行动:
https://bugs.python.org/issue14074
argparse允许nargs> 1作为位置参数,但不允许metavar作为元组
答案 1 :(得分:1)
在hpaulj's answer之后,这是使用action='append'
的另一种解决方法:
for name in 'width', 'height':
parser.add_argument('size', type=int, help=name, metavar=name[0], action='append')
args = parser.parse_args(['4', '3'])
print(args)
parser.print_help()
输出:
Namespace(size=[4, 3])
usage: test.py [-h] w h
positional arguments:
w width
h height