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

Steven D'Aprano steve at pearwood.info
Sat Oct 3 20:22:28 CEST 2009


On Sun, 4 Oct 2009 04:46:19 am Yuvgoog Greenle wrote:

> I just think that if a parser error is causing the SystemExit, I
> would rather catch a parser error than catching a SystemExit for the
> sake of readability. It saves me the comments:
>
> # Catching SystemExit because parse_args() throws SystemExit on
> parser errors.

But why are you catching the error? As a general rule, you *want* your 
command line app to exit if it can't understand the arguments you pass 
to it. What else can it do? Guess what you wanted?

Assuming you have a reason for catching the exception, I don't see that 
there's any difference in readability between these:

parser = argparse.ArgumentParser()
setup_args(parser)
try:
    ns = parser.parse_args()
except argparse.ParserError:
    process_error()
else:
    main(ns)

and:

parser = argparse.ArgumentParser()
setup_args(parser)
try:
    ns = parser.parse_args()
except SystemExit:
    process_error()
else:
    main(ns)


You don't need a comment warning that you are catching SystemExit 
because parse_args raises SystemExit, any more than you need a comment 
saying that you are catching ValueError because some function raises 
ValueError. The fact that you are catching an exception implies that 
the function might raise that exception. A comment like:

"Catching SystemExit because parse_args() throws SystemExit on parser 
errors."

is up them with comments like this:

x += 1  # Add 1 to x.



-- 
Steven D'Aprano


More information about the Python-Dev mailing list