diff -r 421847aa0b22 Lib/argparse.py --- a/Lib/argparse.py Mon Jun 01 19:38:50 2015 -0700 +++ b/Lib/argparse.py Mon Jun 01 22:19:47 2015 -0700 @@ -118,10 +118,16 @@ def __repr__(self): type_name = type(self).__name__ arg_strings = [] + star_args={} for arg in self._get_args(): arg_strings.append(repr(arg)) for name, value in self._get_kwargs(): - arg_strings.append('%s=%r' % (name, value)) + if name.isidentifier(): + arg_strings.append('%s=%r' % (name, value)) + else: + star_args[name] = value + if star_args: + arg_strings.append('**%s' %(repr(star_args))) return '%s(%s)' % (type_name, ', '.join(arg_strings)) def _get_kwargs(self): diff -r 421847aa0b22 Lib/test/test_argparse.py --- a/Lib/test/test_argparse.py Mon Jun 01 19:38:50 2015 -0700 +++ b/Lib/test/test_argparse.py Mon Jun 01 22:19:47 2015 -0700 @@ -4511,6 +4511,21 @@ ns = argparse.Namespace(foo=42, bar='spam') string = "Namespace(bar='spam', foo=42)" self.assertStringEqual(ns, string) + + def test_namespace_starkwargs_notidentifier(self): + ns = argparse.Namespace(**{'"': 'quote'}) + string = '''Namespace(**{'"': 'quote'})''' + self.assertStringEqual(ns, string) + + def test_namespace_kwargs_and_starkwargs_notidentifier(self): + ns = argparse.Namespace(a=1, **{'"': 'quote'}) + string = '''Namespace(a=1, **{'"': 'quote'})''' + self.assertStringEqual(ns, string) + + def test_namespace_starkwargs_identifier(self): + ns = argparse.Namespace(**{'valid': True}) + string = 'Namespace(valid=True)' + self.assertStringEqual(ns, string) def test_parser(self): parser = argparse.ArgumentParser(prog='PROG')