import argparse import re ArgumentParser = argparse.ArgumentParser ArgumentError = argparse.ArgumentError parser =ArgumentParser() try: parser.add_argument('foo',nargs='1') except ArgumentError as e: print(e) assert(re.search(r"nargs (.*) not integer or",str(e))) parser.add_argument('foo',nargs=1) group = parser.add_argument_group('g') try: group.add_argument('bar',nargs='**') except ArgumentError as e: print(e) group.add_argument('bar',nargs='*') parser.add_argument('baz') print(parser.format_help()) print(parser.parse_args('foo bar baz'.split())) m = parser.add_mutually_exclusive_group() try: m.add_argument('-my',nargs='test') except ArgumentError as e: print(e) # "nargs 'test' not integer or [None, '?', '*', '+', '...', 'A...']" #print(parser.format_help()) try: parser.add_argument('-w', help='w', nargs='+', metavar=('W1',)) except ArgumentError as e: print(e) except ValueError as e: print(e) # length of metavar tuple does not match nargs try: group.add_argument('-x', help='x', nargs='*', metavar=('X1', 'X2', 'x3')) except ArgumentError as e: print(e) except ValueError as e: print(e) m.add_argument('-mz') try: m.add_argument('-y', help='y', nargs=3, metavar=('Y1', 'Y2')) except ArgumentError as e: print(e) except ValueError as e: print(e) # length of metavar tuple does not match nargs m.add_argument('-y', help='y', nargs=3, metavar=('Y1', 'Y2', 'Y3')) parser.add_argument('-z', help='z', nargs='?', metavar=('Z1', )) print(parser.format_help()) # test error message from parser._get_nargs_pattern a = parser.add_argument('--extra',nargs=1) print(parser.parse_args('foo bar --extra 1'.split())) a.nargs = 'test' # change nargs of an established action try: print(parser.parse_args('foo bar --extra 1'.split())) except ValueError as e: print(e)