加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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确实指出了这一点.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读