【发布时间】:2019-10-14 07:48:30
【问题描述】:
您好,我想我的解析器参数不能传递任何值,例如:
parser.add_argument('-s', '--staged', action=FooAction)
还有我的用户定义操作:
class FooAction(argparse.Action):
def __call__(self, parser, namespace, values, option_string=None):
print("action")
当我尝试在没有任何值的情况下调用它时:
python my_script -s
我收到此错误消息:
test.py: error: argument -s/--staged: expected one argument
我知道我可以将操作“store_true”添加到我的参数中,但在此解决方案中,我无法将此参数的执行重定向到我定义的操作类。
有人知道如何修改 FooAction 以实现“store_true”动作行为吗?
编辑
设置 nargs=0 的类 Fooaction:
class FooAction(argparse.Action):
def __init__(self, option_strings, dest, nargs=0, **kwargs):
super(FooAction, self).__init__(option_strings, dest, nargs, **kwargs)
def __call__(self, parser, namespace, values, option_string=None):
print("action")
【问题讨论】:
-
你看the implementation了吗?
-
默认
nargs是None,这意味着需要一个参数。查看store_true或store_const子类的定义,我相信它设置了nargs=0。 -
_StoreConstAction类不是公开的,但store_true操作通过初始化argparse.Action和nargs=0来实现。所以,就照着做吧。 -
好吧,即使我设置 nargs=0 和/或 const=True,它也会显示相同的错误消息
-
你在哪里设置
nargs=0。我认为您需要展示更多代码。