In python, argparse crashes when using -h

When I started. /foo.py -h where foo.py is the following code, it crashes with an error

ValueError: Too many values ​​to unpack

Here is the code.

#!/usr/bin/python import argparse parser = argparse.ArgumentParser(description='Find matrices.') parser.add_argument('integers', metavar=('n','h'), type=int, nargs=2, help='Dimensions of the matrix') (n,h)= parser.parse_args().integers 

Is there an error in my code?

Full trace (Python 2.7.3):

 Traceback (most recent call last): File "argp.py", line 15, in <module> (n,h)= parser.parse_args().integers File "/usr/lib/python2.7/argparse.py", line 1688, in parse_args args, argv = self.parse_known_args(args, namespace) File "/usr/lib/python2.7/argparse.py", line 1720, in parse_known_args namespace, args = self._parse_known_args(args, namespace) File "/usr/lib/python2.7/argparse.py", line 1926, in _parse_known_args start_index = consume_optional(start_index) File "/usr/lib/python2.7/argparse.py", line 1866, in consume_optional take_action(action, args, option_string) File "/usr/lib/python2.7/argparse.py", line 1794, in take_action action(self, namespace, argument_values, option_string) File "/usr/lib/python2.7/argparse.py", line 994, in __call__ parser.print_help() File "/usr/lib/python2.7/argparse.py", line 2313, in print_help self._print_message(self.format_help(), file) File "/usr/lib/python2.7/argparse.py", line 2280, in format_help formatter.add_arguments(action_group._group_actions) File "/usr/lib/python2.7/argparse.py", line 273, in add_arguments self.add_argument(action) File "/usr/lib/python2.7/argparse.py", line 258, in add_argument invocations = [get_invocation(action)] File "/usr/lib/python2.7/argparse.py", line 534, in _format_action_invocation metavar, = self._metavar_formatter(action, action.dest)(1) ValueError: too many values to unpack 
+7
python argparse
source share
1 answer

This is a bug in argparse , where nargs , the metavar tuple metavar and positional arguments do not mix. integers is a positional argument, not an optional --integers .

Or make it an optional argument:

 parser.add_argument('--integers', metavar=('n','h'), type=int, nargs=2, help='Dimensions of the matrix') 

or use two positional arguments:

 parser.add_argument('n', type=int, help='Dimensions of the matrix') parser.add_argument('h', type=int, help='Dimensions of the matrix') 

instead.

See issue 14074 in Python for bug tracking for a suggested bug fix.

+8
source share

All Articles