This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Author skip.montanaro
Recipients skip.montanaro
Date 2008-06-11.17:23:24
SpamBayes Score 0.00572351
Marked as misclassified No
Message-id <1213205007.57.0.132667292732.issue3079@psf.upfronthosting.co.za>
In-reply-to
Content
This seems like a bug in optparse.OptionParser:

    def exit(self, status=0, msg=None):
        if msg:
            sys.stderr.write(msg)
        sys.exit(status)

    def error(self, msg):
        """error(msg : string)

        Print a usage message incorporating 'msg' to stderr and exit.
        If you override this in a subclass, it should not return -- it
        should either exit or raise an exception.
        """
        self.print_usage(sys.stderr)
        self.exit(2, "%s: error: %s\n" % (self.get_prog_name(), msg))

By default I think it should raise an exception when it encounters an
error, not exit.  Programmers shouldn't be forced to subclass code in
the standard library to get recommended practice.

If you feel this behavior can't be changed in 2.6 it should at least
be corrected in 3.0.

The cruel irony is that inside OptionParser.parse_args it actually
catches both BadOptionError and OptionValueError but suppresses them
by calling self.error() within the except block...  *arrgggghhh*...
The correct behavior there is (in my opinion) to get rid of the
try/except statement altogether and just let the exceptions propagate.
Other calls to self.error() should be replaced with suitable raise
statements.

Skip
History
Date User Action Args
2008-06-11 17:23:28skip.montanarosetspambayes_score: 0.00572351 -> 0.00572351
recipients: + skip.montanaro
2008-06-11 17:23:27skip.montanarosetspambayes_score: 0.00572351 -> 0.00572351
messageid: <1213205007.57.0.132667292732.issue3079@psf.upfronthosting.co.za>
2008-06-11 17:23:26skip.montanarolinkissue3079 messages
2008-06-11 17:23:24skip.montanarocreate