Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.python > #49345

Re: Why is the argparse module so inflexible?

From Robert Kern <robert.kern@gmail.com>
Subject Re: Why is the argparse module so inflexible?
Date 2013-06-27 20:47 +0100
References <mailman.3924.1372337705.3114.python-list@python.org> <roy-57E318.09080527062013@70-1-84-166.pools.spcsdns.net> <51CC42E3.3070508@gmail.com> <51CC620E.1030104@davea.name>
Newsgroups comp.lang.python
Message-ID <mailman.3940.1372362483.3114.python-list@python.org> (permalink)

Show all headers | View raw


On 2013-06-27 17:02, 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.

Internally, the parser raises ArgumentError which has some useful pieces of 
information, specifically, the name of the argument that failed to parse. 
Unfortunately, it catches that error in parse_known_args(), then formats that 
information into a message string to pass to the error() method, which by 
default raises SystemExit with just that message string. It is somewhat 
difficult to override the parse_known_args() to not lose that information from 
the ArgumentError because you will have to copy-paste the rest of the code in there.

So yes, you can override the error() method or catch SystemExit if all you want 
is the formatted message string, but I have to agree that there is a missed 
opportunity to make argparse more widely usable for other command-line like 
parsing tasks[1].

[1] As an existence proof, I offer you one that I wrote for handling IPython's 
%magic commands. I just needed the formatted string, so I could just get away 
with overriding error().

https://github.com/ipython/ipython/blob/master/IPython/core/magic_arguments.py

-- 
Robert Kern

"I have come to believe that the whole world is an enigma, a harmless enigma
  that is made terrible by our own mad attempt to interpret it as though it had
  an underlying truth."
   -- Umberto Eco

Back to comp.lang.python | Previous | NextPrevious in thread | Find similar | Unroll thread


Thread

Why is the argparse module so inflexible? Andrew Berg <robotsondrugs@gmail.com> - 2013-06-27 07:54 -0500
  Re: Why is the argparse module so inflexible? Roy Smith <roy@panix.com> - 2013-06-27 09:08 -0400
    Re: Why is the argparse module so inflexible? Andrew Berg <robotsondrugs@gmail.com> - 2013-06-27 08:49 -0500
    Re: Why is the argparse module so inflexible? Dave Angel <davea@davea.name> - 2013-06-27 12:02 -0400
      Re: Why is the argparse module so inflexible? Steven D'Aprano <steve+comp.lang.python@pearwood.info> - 2013-06-27 22:49 +0000
        Re: Why is the argparse module so inflexible? Cameron Simpson <cs@zip.com.au> - 2013-06-28 09:34 +1000
        Re: Why is the argparse module so inflexible? Ethan Furman <ethan@stoneleaf.us> - 2013-06-28 18:36 -0700
          Re: Why is the argparse module so inflexible? rusi <rustompmody@gmail.com> - 2013-06-28 21:12 -0700
            Re: Why is the argparse module so inflexible? Terry Reedy <tjreedy@udel.edu> - 2013-06-29 00:37 -0400
              Re: Why is the argparse module so inflexible? Roy Smith <roy@panix.com> - 2013-06-29 10:12 -0400
                Re: Why is the argparse module so inflexible? Andrew Berg <robotsondrugs@gmail.com> - 2013-06-29 09:17 -0500
          Re: Why is the argparse module so inflexible? Steven D'Aprano <steve+comp.lang.python@pearwood.info> - 2013-06-29 05:28 +0000
            Re: Why is the argparse module so inflexible? Marcin Szamotulski <mszamot@gmail.com> - 2013-06-29 13:38 +0100
            Re: Why is the argparse module so inflexible? MRAB <python@mrabarnett.plus.com> - 2013-06-29 16:58 +0100
            Re: Why is the argparse module so inflexible? Ethan Furman <ethan@stoneleaf.us> - 2013-06-29 12:17 -0700
        Re: Why is the argparse module so inflexible? Modulok <modulok@gmail.com> - 2013-06-28 19:39 -0600
        Re: Why is the argparse module so inflexible? Isaac To <isaac.to@gmail.com> - 2013-06-29 12:37 +0800
    Re: Why is the argparse module so inflexible? Robert Kern <robert.kern@gmail.com> - 2013-06-27 20:47 +0100

csiph-web