Suppose you create a Python script like the one below.
import argparse
parser = argparse.ArgumentParser(description='')
parser.add_argument('--zoom',
action='store',
type=float,
default=1.0,
help="Expansion rate(%)")
args = parser.parse_args()
print("zoom is {}".format(args.zoom))
This can be done normally,
$ python hoge.py --zoom 2.0
zoom is 2.0
I get a Value Error when I try to display help.
$ python hoge.py -h
Traceback (most recent call last):
File "hoge.py", line 9, in <module>
args = parser.parse_args()
File "C:\Python37\lib\argparse.py", line 1749, in parse_args
args, argv = self.parse_known_args(args, namespace)
File "C:\Python37\lib\argparse.py", line 1781, in parse_known_args
namespace, args = self._parse_known_args(args, namespace)
File "C:\Python37\lib\argparse.py", line 1987, in _parse_known_args
start_index = consume_optional(start_index)
File "C:\Python37\lib\argparse.py", line 1927, in consume_optional
take_action(action, args, option_string)
File "C:\Python37\lib\argparse.py", line 1855, in take_action
action(self, namespace, argument_values, option_string)
File "C:\Python37\lib\argparse.py", line 1037, in __call__
parser.print_help()
File "C:\Python37\lib\argparse.py", line 2474, in print_help
self._print_message(self.format_help(), file)
File "C:\Python37\lib\argparse.py", line 2458, in format_help
return formatter.format_help()
File "C:\Python37\lib\argparse.py", line 284, in format_help
help = self._root_section.format_help()
File "C:\Python37\lib\argparse.py", line 215, in format_help
item_help = join([func(*args) for func, args in self.items])
File "C:\Python37\lib\argparse.py", line 215, in <listcomp>
item_help = join([func(*args) for func, args in self.items])
File "C:\Python37\lib\argparse.py", line 215, in format_help
item_help = join([func(*args) for func, args in self.items])
File "C:\Python37\lib\argparse.py", line 215, in <listcomp>
item_help = join([func(*args) for func, args in self.items])
File "C:\Python37\lib\argparse.py", line 525, in _format_action
help_text = self._expand_help(action)
File "C:\Python37\lib\argparse.py", line 614, in _expand_help
return self._get_help_string(action) % params
ValueError: unsupported format character ')' (0x29) at index 5
As you can see at the end of the error message, the output string is formatted like return self._get_help_string (action)% params
.
It seems that unintended parsing is done when %
is included.
The workaround is to avoid using %
as shown below.
import argparse
parser = argparse.ArgumentParser(description='')
parser.add_argument('--zoom',
action='store',
type=float,
default=1.0,
- help="Expansion rate(%)")
+ help="Expansion rate(percent)")
args = parser.parse_args()
print("zoom is {}".format(args.zoom))
Alternatively, escape with %%
.
- help="Expansion rate(%)")
+ help="Expansion rate(%%)")
It came out.
$ python hoge.py -h
usage: hoge.py [-h] [--zoom ZOOM]
optional arguments:
-h, --help show this help message and exit
--zoom ZOOM magnification(percent)
$ python hoge.py -h
usage: hoge.py [-h] [--zoom ZOOM]
optional arguments:
-h, --help show this help message and exit
--zoom ZOOM magnification(%)
Recommended Posts