This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Author rgov
Recipients rgov
Date 2019-09-18.16:20:02
SpamBayes Score -1.0
Marked as misclassified Yes
Message-id <1568823602.67.0.456772116494.issue38217@roundup.psfhosted.org>
In-reply-to
Content
argparse supports consuming multiple command-line arguments with nargs=2, etc. It converts them to the type given in the argument's type parameter.

argparse does not provide a good solution when the input arguments should be different data types. For an example, you cannot have an argument that expects a str followed by an int, '--set-age Bob 34'.

Ordinarily, the suggestion would be to split it into two arguments, like '--set-person Bob --set-age 34'.

However, this becomes awkward with an action such as 'append', where the command line arguments become tedious, like '--set-person Bob --set-age 34 --set-person Alice --set-age 29', or confusing, as in '--set-person Bob --set-person Alice --set-age 34 --set-age 29'.

My proposal is to allow the 'type' parameter to accept a tuple of types:

    p.add_argument('--set-age', nargs=2, type=(str, int))

Since 'nargs' is redundant, this could even be simplified to just:

    p.add_argument('--set-age', type=(str, int))

The resulting parsed argument would then be a tuple of (str, int), as opposed to a list. If action='append', the result would be a list of such tuples.

This creates no backwards compatibility issue because tuple instances are not callable, so this was never valid code that did something else.

A further enhancement could be that when nargs='+' or '*', and a tuple of types is provided, the types are used round robin: '--set-ages Bob 34 Alice 29'. An exception would be raised if it would create an incomplete tuple.

See here for other discussion and workarounds: https://stackoverflow.com/questions/16959101/python-argparse-how-to-have-nargs-2-with-type-str-and-type-int
History
Date User Action Args
2019-09-18 16:20:02rgovsetrecipients: + rgov
2019-09-18 16:20:02rgovsetmessageid: <1568823602.67.0.456772116494.issue38217@roundup.psfhosted.org>
2019-09-18 16:20:02rgovlinkissue38217 messages
2019-09-18 16:20:02rgovcreate