diff options
author | Guido van Rossum <guido@python.org> | 1999-12-21 22:38:40 (GMT) |
---|---|---|
committer | Guido van Rossum <guido@python.org> | 1999-12-21 22:38:40 (GMT) |
commit | 80c33e562ddcc0af4eed6708aa30603972e62cfc (patch) | |
tree | 14c703ada90eee7d2230ab1439fa515cd74463db /Lib/getopt.py | |
parent | b9bdfc6a230f846a1cd1c681def83cf04d357587 (diff) | |
download | cpython-80c33e562ddcc0af4eed6708aa30603972e62cfc.zip cpython-80c33e562ddcc0af4eed6708aa30603972e62cfc.tar.gz cpython-80c33e562ddcc0af4eed6708aa30603972e62cfc.tar.bz2 |
Contribution from Gerrit Holl:
This patch changes the string-based exceptions to class-based
exceptions, so that you can fetch the unknown option as an
attribute. As far as I know, it is backward compatible.
[The new exception class is called GetoptError; the name error is an
alias for compatibility.]
Diffstat (limited to 'Lib/getopt.py')
-rw-r--r-- | Lib/getopt.py | 34 |
1 files changed, 26 insertions, 8 deletions
diff --git a/Lib/getopt.py b/Lib/getopt.py index 31b1fc8..b5fdaed 100644 --- a/Lib/getopt.py +++ b/Lib/getopt.py @@ -7,15 +7,33 @@ and `--'). Long options similar to those supported by GNU software may be used as well via an optional third argument. This module provides a single function and an exception: +Gerrit Holl <gerrit@nl.linux.org> moved the string-based exceptions +to class-based exceptions. + getopt() -- Parse command line options -error -- Exception (string) raised when bad options are found +GetoptError -- exception (class) raised with 'opt' attribute, which is the +option involved with the exception. """ # Long option support added by Lars Wirzenius <liw@iki.fi>. import string -error = 'getopt.error' +class GetoptError(Exception): + opt = '' + msg = '' + def __init__(self, *args): + self.args = args + if len(args) == 1: + self.msg = args[0] + elif len(args) == 2: + self.msg = args[0] + self.opt = args[1] + + def __str__(self): + return self.msg + +error = GetoptError # backward compatibility def getopt(args, shortopts, longopts = []): """getopt(args, options[, long_options]) -> opts, args @@ -72,10 +90,10 @@ def do_longs(opts, opt, longopts, args): if has_arg: if optarg is None: if not args: - raise error, 'option --%s requires argument' % opt + raise GetoptError('option --%s requires argument' % opt, opt) optarg, args = args[0], args[1:] elif optarg: - raise error, 'option --%s must not have an argument' % opt + raise GetoptError('option --%s must not have an argument' % opt, opt) opts.append(('--' + opt, optarg or '')) return opts, args @@ -90,11 +108,11 @@ def long_has_args(opt, longopts): continue if y != '' and y != '=' and i+1 < len(longopts): if opt == longopts[i+1][:optlen]: - raise error, 'option --%s not a unique prefix' % opt + raise GetoptError('option --%s not a unique prefix' % opt, opt) if longopts[i][-1:] in ('=', ): return 1, longopts[i][:-1] return 0, longopts[i] - raise error, 'option --' + opt + ' not recognized' + raise GetoptError('option --%s not recognized' % opt, opt) def do_shorts(opts, optstring, shortopts, args): while optstring != '': @@ -102,7 +120,7 @@ def do_shorts(opts, optstring, shortopts, args): if short_has_arg(opt, shortopts): if optstring == '': if not args: - raise error, 'option -%s requires argument' % opt + raise GetoptError('option -%s requires argument' % opt, opt) optstring, args = args[0], args[1:] optarg, optstring = optstring, '' else: @@ -114,7 +132,7 @@ def short_has_arg(opt, shortopts): for i in range(len(shortopts)): if opt == shortopts[i] != ':': return shortopts[i+1:i+2] == ':' - raise error, 'option -%s not recognized' % opt + raise GetoptError('option -%s not recognized' % opt, opt) if __name__ == '__main__': import sys |