由于mgilson suggestednargs=0
的伎俩。由于它的内在到你的动作,我把它里面的动作:
class StartAction(argparse.Action):
def __init__(self, nargs=0, **kw):
super().__init__(nargs=nargs, **kw)
def __call__(self, parser, namespace, values, option_string=None):
print "Hello"
start.add_argument('-s', '--start', action=StartAction)
,你有你想要的行为,而无需添加nargs=0
每add_argument()
通话的冗余。整洁,如果你有多个参数以相同的方式工作。
但是,用户仍然可以覆盖缺省值nargs=0
,这对您的用例来说很愚蠢,如问题中所示。所以我会强制执行它:
class StartAction(argparse.Action):
def __init__(self, nargs=0, **kw):
if nargs != 0:
raise ValueError('nargs for StartAction must be 0; it is '
'just a flag.')
super().__init__(nargs=nargs, **kw)
def __call__(self, parser, namespace, values, option_string=None):
print "Hello"
来源
2016-06-03 12:13:39
cfi
ValueError:存储操作的nargs必须> 0;如果你没有什么要存储的,诸如store true或store const之类的操作可能更合适 – Lucina
我不同意@Lucina的评论。您可能需要调用自定义操作以在解析参数和复杂操作之间建立无缝映射。我优先考虑将Action对象作为CLI的参数,因此我在CLI itface和处理它的对象之间具有多态性。 – Daniel