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,values)parser = argparse.ArgumentParser()parser.add_argument("-r","--rdist",action=RdistAction,nargs='*',type=int)args = parser.parse_args()
但我想要顽固,因为我最初的目标是将nargs设置为3.但是当我在上面的代码中使用nargs = 3时,我收到一条错误消息,指出预期有3个参数.
我已经Google了,从结果我的直觉告诉我,我必须添加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 argparseclass RdistAction(argparse.Action): def __call__(self,option_string=None): if not values: setattr(namespace,50]) else: setattr(namespace,nargs=3,type=int)print parser.parse_args('-r 0 500 20'.split())
给
namespace(rdist=[0,500,20])
这就是你要找的东西吗?
这里的诀窍是,如果nargs不是特殊字符之一(‘?’,’*’,”等),那么它需要是一个整数,而不是一个字符串.
请注意,the documentation确实指出了这一点.
总结以上是内存溢出为你收集整理的Python – Circumvent argparse nargs错误全部内容,希望文章能够帮你解决Python – Circumvent argparse nargs错误所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)