mirror of
https://github.com/python/cpython.git
synced 2025-08-27 04:05:34 +00:00
gh-92445 Improve interaction between nargs="*" and choices() (GH-92565)
This commit is contained in:
parent
cd492d43a2
commit
ad7340e8c5
3 changed files with 13 additions and 1 deletions
|
@ -2477,9 +2477,11 @@ class ArgumentParser(_AttributeHolder, _ActionsContainer):
|
||||||
not action.option_strings):
|
not action.option_strings):
|
||||||
if action.default is not None:
|
if action.default is not None:
|
||||||
value = action.default
|
value = action.default
|
||||||
|
self._check_value(action, value)
|
||||||
else:
|
else:
|
||||||
|
# since arg_strings is always [] at this point
|
||||||
|
# there is no need to use self._check_value(action, value)
|
||||||
value = arg_strings
|
value = arg_strings
|
||||||
self._check_value(action, value)
|
|
||||||
|
|
||||||
# single argument or optional argument produces a single value
|
# single argument or optional argument produces a single value
|
||||||
elif len(arg_strings) == 1 and action.nargs in [None, OPTIONAL]:
|
elif len(arg_strings) == 1 and action.nargs in [None, OPTIONAL]:
|
||||||
|
|
|
@ -5230,6 +5230,13 @@ class TestParseKnownArgs(TestCase):
|
||||||
self.assertEqual(NS(v=3, spam=True, badger="B"), args)
|
self.assertEqual(NS(v=3, spam=True, badger="B"), args)
|
||||||
self.assertEqual(["C", "--foo", "4"], extras)
|
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
|
# 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…
Add table
Add a link
Reference in a new issue