gpt4 book ai didi

Python - 规避 argparse nargs 错误

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

我有一个这样工作的程序:

prog.py filename -r

使用我给定的默认默认值

prog.py filename -r 0 500 20

使用 0、500 和 20

我已经成功地使用了:

class RdistAction(argparse.Action):
def __call__(self,parser,namespace,values,option_string=None):
if not values:
setattr(namespace,self.dest,[0, 1000, 50])
else:
setattr(namespace,self.dest,values)

parser = argparse.ArgumentParser()
parser.add_argument("-r", "--rdist", action=RdistAction, nargs='*', type=int)
args = parser.parse_args()

但我想固执己见,因为我最初的目标是将 nargs 设置为 3。但是当我在上面的代码中使用 nargs=3 时,我收到一条错误消息,指出需要 3 个参数。

我四处搜索,根据直觉,我必须添加 def __init__ 并修改该函数中的某些内容。是否有可能在 nargs='*' 时获得与上述代码相同的结果,但使用 nargs=3 代替?

最佳答案

如果我将您的 add_argument 行更改为 nargs='3',我想我得到了您正在处理的错误:

Traceback (most recent call last):
File "python", line 12, in <module>
ValueError: length of metavar tuple does not match nargs

如果我设置 nargs=3(不带引号),那么它对我有用:

import argparse

class RdistAction(argparse.Action):
def __call__(self,parser,namespace,values,option_string=None):
if not values:
setattr(namespace,self.dest,[0, 1000, 50])
else:
setattr(namespace,self.dest,values)

parser = argparse.ArgumentParser()
parser.add_argument("-r", "--rdist", action=RdistAction, nargs=3, type=int)
print parser.parse_args('-r 0 500 20'.split())

给予

Namespace(rdist=[0, 500, 20])

这就是你要找的吗?

这里的技巧是,如果 nargs 不是特殊字符之一('?'、'*'、'+' 等),那么它必须是整数,而不是字符串。

请注意 the documentation确实指出了这一点。

关于Python - 规避 argparse nargs 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43044166/

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