[issue22049] argparse: type=<callable> doesn't honor nargs > 1

paul j3 report at bugs.python.org
Sat Jul 26 00:17:03 CEST 2014


paul j3 added the comment:

What you want is a custom Action rather than a custom Type.  

from the documentation:

    >>> class FooAction(argparse.Action):
    ...     def __call__(self, parser, namespace, values, option_string=None):
    ...         print('%r %r %r' % (namespace, values, option_string))
    ...         setattr(namespace, self.dest, values)

'values' will be the list ['1','2','3'], which you test and manipulate, before finally saving it to the 'namespace'.

    ret = (int(values[0]), int(values[1]), float(values[2]))
    setattr(namespace, self.dest, ret)

Setting 'nargs=3' ensures that this action will always get a 3 item list.  If the parser can't give it 3 items, it will raise an error rather than call your Action.

'optparse' passed the remaining argument strings to Option's callback, which could consume as many as it wanted.  'argparse' does not give the Actions that power.  There is a fundamental difference in the parsing algorithm.

----------

_______________________________________
Python tracker <report at bugs.python.org>
<http://bugs.python.org/issue22049>
_______________________________________


More information about the Python-bugs-list mailing list