Python – Circumvent argparse nargs错误
发布时间:2020-12-20 12:12:20 所属栏目:Python 来源:网络整理
导读:我有一个像这样工作的程序: 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
我有一个像这样工作的程序:
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 argparse class 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确实指出了这一点. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |