Python – Circumvent argparse nargs错误

Python – Circumvent argparse nargs错误,第1张

概述我有一个像这样工作的程序: 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): 我有一个像这样工作的程序:

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错误所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1194319.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存