gh-92445 Improve interaction between nargs="*" and choices() (GH-92565)

This commit is contained in:
Harry 2022-08-25 12:18:38 +01:00 committed by GitHub
parent cd492d43a2
commit ad7340e8c5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 13 additions and 1 deletions

View File

@ -2477,9 +2477,11 @@ class ArgumentParser(_AttributeHolder, _ActionsContainer):
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]:

View File

@ -5230,6 +5230,13 @@ class TestParseKnownArgs(TestCase):
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
# ===========================

View File

@ -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``.