4

Using argparse, I would like the user to specify 6 values as the argument of one optional input argument. Is there a built-in way to check if those values are floats?

parser.add_argument("-e", nargs=6, metavar=('a', 'b', 'c', 'd', 'e', 'f'),
                        help="my help message",
                        default=None)
Wooble
  • 87,717
  • 12
  • 108
  • 131
Ricky Robinson
  • 21,798
  • 42
  • 129
  • 185

1 Answers1

12

Use type=float:

parser.add_argument("-e", nargs=6, metavar=('a', 'b', 'c', 'd', 'e', 'f'),
                        help="my help message", type=float,
                        default=None)

Demo:

>>> import argparse
>>> parser = argparse.ArgumentParser(description='Process some floats.')
>>> parser.add_argument("-e", nargs=6, metavar=('a', 'b', 'c', 'd', 'e', 'f'),
...                         help="my help message", type=float,
...                         default=None)
_StoreAction(option_strings=['-e'], dest='e', nargs=6, const=None, default=None, type=<type 'float'>, choices=None, help='my help message', metavar=('a', 'b', 'c', 'd', 'e', 'f'))
>>> try:
...     parser.parse_args('-e 1.0 2.0 3.33 4.45 5.15 6.0'.split())
... except SystemExit:
...     pass
... 
Namespace(e=[1.0, 2.0, 3.33, 4.45, 5.15, 6.0])
>>> try:
...     parser.parse_args('-e foo bar baz spam ham eggs'.split())
... except SystemExit:
...     pass
... 
usage: [-h] [-e a b c d e f]
: error: argument -e: invalid float value: 'foo'
Martijn Pieters
  • 1,048,767
  • 296
  • 4,058
  • 3,343