diff -r a1a1296556d7 Lib/argparse.py --- a/Lib/argparse.py Tue Apr 26 06:45:24 2011 +0300 +++ b/Lib/argparse.py Wed Apr 27 18:14:34 2011 +0800 @@ -1590,8 +1590,9 @@ fromfile_prefix_chars=None, argument_default=None, conflict_handler='error', - add_help=True): - + add_help=True, + exit_on_argument_error=True): + if version is not None: import warnings warnings.warn( @@ -1617,6 +1618,7 @@ self.formatter_class = formatter_class self.fromfile_prefix_chars = fromfile_prefix_chars self.add_help = add_help + self.exit_on_argument_error = exit_on_argument_error add_group = self.add_argument_group self._positionals = add_group(_('positional arguments')) @@ -1754,15 +1756,19 @@ setattr(namespace, dest, self._defaults[dest]) # parse the arguments and exit if there are any errors - try: + if not self.exit_on_argument_error: namespace, args = self._parse_known_args(args, namespace) - if hasattr(namespace, _UNRECOGNIZED_ARGS_ATTR): - args.extend(getattr(namespace, _UNRECOGNIZED_ARGS_ATTR)) - delattr(namespace, _UNRECOGNIZED_ARGS_ATTR) - return namespace, args - except ArgumentError: - err = _sys.exc_info()[1] - self.error(str(err)) + else: + try: + namespace, args = self._parse_known_args(args, namespace) + except ArgumentError: + err = _sys.exc_info()[1] + self.error(str(err)) + + if hasattr(namespace, _UNRECOGNIZED_ARGS_ATTR): + args.extend(getattr(namespace, _UNRECOGNIZED_ARGS_ATTR)) + delattr(namespace, _UNRECOGNIZED_ARGS_ATTR) + return namespace, args def _parse_known_args(self, arg_strings, namespace): # replace arg strings that are file references