Index: Lib/test/test_argparse.py =================================================================== --- Lib/test/test_argparse.py (revision 83730) +++ Lib/test/test_argparse.py (working copy) @@ -3847,6 +3847,24 @@ # nargs is always disallowed self.assertTypeError('-x', nargs='*', action=action) + def test_wrong_number_of_metavars(self): + "Verify that a tuple of metavars that disagrees with nargs raises error immediately." + for metavars in ('X', ('X', ), ('X', 'Y'), ('X' ,'Y', 'Z')): + for (nargs, nmetavars) in ( (1, (1,)), + (2, (1, 2)), + (3, (1, 3)), + ('?', (1,)), + ('*', (2,)), + ('+', (2,)), + ): + if len(metavars) in nmetavars: + # There's no self.assertNoValueError; I assume that letting the error + # itself propagate is good enough to show any unwanted exception here + parser = argparse.ArgumentParser() + parser.add_argument('--foo', nargs=nargs, metavar=metavars) + else: + self.assertValueError('--foo', nargs=nargs, metavar=metavars) + def test_more_than_one_argument_actions(self): for action in ['store', 'append']: