diff -r 44f455e6163d Lib/argparse.py --- a/Lib/argparse.py Thu Jun 27 12:23:29 2013 +0200 +++ b/Lib/argparse.py Fri Jul 25 22:46:41 2014 -0700 @@ -1544,6 +1544,9 @@ super(_ArgumentGroup, self)._remove_action(action) self._group_actions.remove(action) + def add_argument_group(self, *args, **kwargs): + raise ValueError('Cannot nest groups') + class _MutuallyExclusiveGroup(_ArgumentGroup): @@ -1564,6 +1567,9 @@ self._container._remove_action(action) self._group_actions.remove(action) + def add_mutually_exclusive_group(self, **kwargs): + raise ValueError('Cannot nest mutually exclusive groups') + class ArgumentParser(_AttributeHolder, _ActionsContainer): """Object for parsing command line strings into Python objects. diff -r 44f455e6163d Lib/test/test_argparse.py --- a/Lib/test/test_argparse.py Thu Jun 27 12:23:29 2013 +0200 +++ b/Lib/test/test_argparse.py Fri Jul 25 22:46:41 2014 -0700 @@ -2326,6 +2326,15 @@ ''' self.assertEqual(parser.format_help(), textwrap.dedent(expected)) + def test_invalid_add_group(self): + parser = ErrorRaisingArgumentParser() + group = parser.add_mutually_exclusive_group() + add_group = group.add_mutually_exclusive_group + raises = self.assertRaises + raises(ValueError, group.add_mutually_exclusive_group) + raises(ValueError, group.add_argument_group, 'title') + + class MEMixin(object): def test_failures_when_not_required(self):