[Python-Dev] argparse ugliness
Xavier Morel
python-dev at masklinn.net
Mon Mar 8 17:49:42 CET 2010
On 8 Mar 2010, at 16:53 , David Stanek wrote:
>
> On Mon, Mar 8, 2010 at 10:40 AM, Steven Bethard
> <steven.bethard at gmail.com> wrote:
>>
>> In argparse, unlike optparse, actions are actually defined by objects
>> with a particular API, and the string is just a shorthand for
>> referring to that. So:
>>
>> parser.add_argument ('--plot', action='store_true')
>>
>> is equivalent to:
>>
>> parser.add_argument('--plot', argparse._StoreTrueAction)
>>
>> Because the names are so long and you'd have to import them, I've left
>> them as private attributes of the module, but if there's really
>> demand, we could rename them to argparse.StoreTrueAction, etc.
>>
>
> Any reason not to do something like:
>
> from argparse import actions
> ...
> parser.add_argument('--plot', actions.store_true)
>
> Basically a small namespace for the constants.
action is taken from **kwargs, not from a positional argument as *args
is a sequence of option strings (so you can write
add_argument('-p', '/p', '--plot', '--land-mass')). So you'd have to write
add_argument('--plot', action=actions.store_true) which is straight from
the department of redundant redundancies.
An option would be
parser.add(actions.StoreTrue('--plot'))
but I'm not sure this makes any sense API-wise, and it would probably make
the code a lot messier as the parser would have to reach into the action
to get the information it needs. Either that, or the action would be an *arg
and argparse would have to walk all of its *args type-testing each one to find
if there's an action anywhere.
More information about the Python-Dev
mailing list