Why is the argparse module so inflexible?

Steven D'Aprano steve+comp.lang.python at pearwood.info
Thu Jun 27 18:49:53 EDT 2013


On Thu, 27 Jun 2013 12:02:22 -0400, Dave Angel wrote:

> On 06/27/2013 09:49 AM, Andrew Berg wrote:
>> On 2013.06.27 08:08, Roy Smith wrote:
>>> Can you give us a concrete example of what you're trying to do?
>> The actual code I've written so far isn't easily condensed into a short
>> simple snippet. I'm trying to use argparse to handle all the little
>> details of parsing and verifying arguments in the precmd hook for a
>> cmd.Cmd child class. argparse's help system is more sophisticated than
>> cmd's help and does all the work of verifying arguments. The problem I
>> keep running into is that I can't handle any bad input very well. I
>> would have to override every method that catches ArgumentError in order
>> to get a useful exception that I would then handle. If I input
>> something that begins with '-' that isn't recognized, parse_args
>> doesn't even raise the exception; it just quits.
> 
> No, it raises the SystemExit exception.  if you don't catch it, then the
> program exits.  Perhaps it's not clear to you, but sys.exit() just
> raises the SystemExit exception, as  Joshua pointed out.

[rant]
I think it is lousy design for a framework like argparse to raise a 
custom ArgumentError in one part of the code, only to catch it elsewhere 
and call sys.exit. At the very least, that ought to be a config option, 
and off by default.

Libraries should not call sys.exit, or raise SystemExit. Whether to quit 
or not is not the library's decision to make, that decision belongs to 
the application layer. Yes, the application could always catch 
SystemExit, but it shouldn't have to.


-- 
Steven



More information about the Python-list mailing list