New submission from paul j3: As discussed in issue 16468, a metavar may be used to provide an alternative representation of a choices option. However if a metvar like 'range(20)' is used, usage formatter strips off the '()'.
>>> parser.add_argument('foo', type=int, choices=range(20), metavar='range(0,20)') >>> parser.format_usage() # expect: 'usage: PROG [-h] range(0,20)\n' # actual: 'usage: PROG [-h] range0,20\n' This is done by a line in the help formater that removes excess mutually exclusive group notation: HelpFormatter._format_actions_usage ... text = _re.sub(r'\(([^|]*)\)', r'\1', text) A solution is to change this line to distinguish between a case like ' (...)' and 'range(...)' text = _re.sub(r'( )\(([^|]*)\)', r'\1\2', text) ---------- files: metaparen.patch keywords: patch messages: 192222 nosy: paul.j3 priority: normal severity: normal status: open title: argparse usage should preserve () in metavars such as range(20) Added file: http://bugs.python.org/file30754/metaparen.patch _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue18349> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com