diff -r 732d70746fc0 Lib/argparse.py --- a/Lib/argparse.py Sat May 19 16:58:45 2012 +0800 +++ b/Lib/argparse.py Sat May 19 14:14:42 2012 +0200 @@ -1088,11 +1088,15 @@ self._choices_actions.append(choice_action) # create the parser and add it to the map + if name in self._name_parser_map: + raise ArgumentError(self, "Subparser '%s' is already defined" % name) parser = self._parser_class(**kwargs) self._name_parser_map[name] = parser # make parser available under aliases also for alias in aliases: + if alias in self._name_parser_map: + raise ArgumentError(self, "Subparser '%s' is already defined" % alias) self._name_parser_map[alias] = parser return parser diff -r 732d70746fc0 Lib/test/test_argparse.py --- a/Lib/test/test_argparse.py Sat May 19 16:58:45 2012 +0800 +++ b/Lib/test/test_argparse.py Sat May 19 14:14:42 2012 +0200 @@ -2001,6 +2001,11 @@ 1 help 2 2 help """)) + def test_error_already_defined_subparser(self): + parser = ErrorRaisingArgumentParser() + subparsers = parser.add_subparsers() + subparsers.add_parser('1') + self.assertRaises(argparse.ArgumentError, subparsers.add_parser, '1') # ============ # Groups tests