mirror of
https://github.com/python/cpython
synced 2024-09-05 00:05:39 +00:00
gh-92445 Improve interaction between nargs="*" and choices() (GH-92565)
This commit is contained in:
parent
cd492d43a2
commit
ad7340e8c5
|
@ -2477,9 +2477,11 @@ def _get_values(self, action, arg_strings):
|
|||
not action.option_strings):
|
||||
if action.default is not None:
|
||||
value = action.default
|
||||
self._check_value(action, value)
|
||||
else:
|
||||
# since arg_strings is always [] at this point
|
||||
# there is no need to use self._check_value(action, value)
|
||||
value = arg_strings
|
||||
self._check_value(action, value)
|
||||
|
||||
# single argument or optional argument produces a single value
|
||||
elif len(arg_strings) == 1 and action.nargs in [None, OPTIONAL]:
|
||||
|
|
|
@ -5230,6 +5230,13 @@ def test_mixed(self):
|
|||
self.assertEqual(NS(v=3, spam=True, badger="B"), args)
|
||||
self.assertEqual(["C", "--foo", "4"], extras)
|
||||
|
||||
def test_zero_or_more_optional(self):
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument('x', nargs='*', choices=('x', 'y'))
|
||||
args = parser.parse_args([])
|
||||
self.assertEqual(NS(x=[]), args)
|
||||
|
||||
|
||||
# ===========================
|
||||
# parse_intermixed_args tests
|
||||
# ===========================
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
Fix a bug in :mod:`argparse` where `nargs="*"` would raise an error instead of returning
|
||||
an empty list when 0 arguments were supplied if choice was also defined in
|
||||
``parser.add_argument``.
|
Loading…
Reference in a new issue