[New-bugs-announce] [issue27227] argparse fails to parse [] when using choices and nargs='*'
Evan
report at bugs.python.org
Sun Jun 5 04:59:16 EDT 2016
New submission from Evan:
When using nargs='*' with choices, it is impossible to specify 0 args:
from argparse import ArgumentParser
parser = ArgumentParser()
parser.add_argument('foo', choices=['foo'], nargs='*')
args = parser.parse_args([]) # <-- fails, error message below
assert args.foo == []
# usage: args.py [-h] [{foo} [{foo} ...]]
# args.py: error: argument foo: invalid choice: [] (choose from 'foo')
The problem appears to be this block of code trying to validate `value` immediately after it sets it to `[]`:
# when nargs='*' on a positional, if there were no command-line
# args, use the default if it is anything other than None
elif (not arg_strings and action.nargs == ZERO_OR_MORE and
not action.option_strings):
if action.default is not None:
value = action.default
else:
value = arg_strings
self._check_value(action, value)
The fix seems to be as simple as moving the check under `if action.default is not None`.
(NOTE: This would be also adequately solved by patches already attached to http://bugs.python.org/issue9625, however the minimal solution to this problem is simpler.)
----------
components: Library (Lib)
messages: 267404
nosy: evan_
priority: normal
severity: normal
status: open
title: argparse fails to parse [] when using choices and nargs='*'
type: behavior
versions: Python 2.7, Python 3.4, Python 3.5, Python 3.6
_______________________________________
Python tracker <report at bugs.python.org>
<http://bugs.python.org/issue27227>
_______________________________________
More information about the New-bugs-announce
mailing list