[Python-Dev] PEP 389: argparse - new command line parsing module

Steven Bethard steven.bethard at gmail.com
Sat Oct 3 17:49:18 CEST 2009


On Sat, Oct 3, 2009 at 8:17 AM, Michael Foord <fuzzyman at voidspace.org.uk> wrote:
> Steven Bethard wrote:
>> On Sat, Oct 3, 2009 at 3:45 AM, Yuvgoog Greenle <ubershmekel at gmail.com>
>> wrote:
>>> I haven't checked if it's possible, but I suggest Argparse have it's
>>> own exception class that inherits from SystemExit and that exception
>>> would be thrown.
>>
>> I've never seen such an idiom before (subclassing SystemExit) but it
>> would certainly be possible create an ArgumentParserExit exception
>> like that. Then you would have your choice of overriding .exit() or
>> catching the exception.
>
> Why not just catch SystemExit? If you want a custom exception the overriding
> .exit() should be sufficient.

I'm certainly fine with that -- I'm just trying to make sure I've
addressed whatever needs addressed to get argparse in.

> I'd be much more interested in Guido's suggestion of auto-generated custom
> help messages for sub-commands.

Maybe I misunderstood, but I think this is already the default
argparse behavior, no?

import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--foo')
subparsers = parser.add_subparsers()
parser1 = subparsers.add_parser('1')
parser1.add_argument('--bar')
parser2 = subparsers.add_parser('2')
parser2.add_argument('baz')
parser.parse_args(['--help'])

>>> import argparse
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--foo')
>>> subparsers = parser.add_subparsers()
>>> parser1 = subparsers.add_parser('1')
>>> parser1.add_argument('--bar')
>>> parser2 = subparsers.add_parser('2')
>>> parser2.add_argument('baz')

>>> # top level argument help
>>> parser.parse_args(['--help'])
usage: [-h] [--foo FOO] {1,2} ...

positional arguments:
  {1,2}

optional arguments:
  -h, --help  show this help message and exit
  --foo FOO

>>> # help for subparser 1
>>> parser.parse_args(['1', '--help'])
usage:  1 [-h] [--bar BAR]

optional arguments:
  -h, --help  show this help message and exit
  --bar BAR

>>> # help for subparser 2
>>> parser.parse_args(['2', '--help'])
usage:  2 [-h] baz

positional arguments:
  baz

optional arguments:
  -h, --help  show this help message and exit

Steve
-- 
Where did you get that preposterous hypothesis?
Did Steve tell you that?
        --- The Hiphopopotamus


More information about the Python-Dev mailing list