summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHarry <harry.lees@gmail.com>2022-08-25 11:18:38 (GMT)
committerGitHub <noreply@github.com>2022-08-25 11:18:38 (GMT)
commitad7340e8c56f61edc1ff4724fe32c9d831db51a7 (patch)
treed33fb0a381f94cb786c2e9491173810c4572a59e
parentcd492d43a2980faf0ef4a3f99c665023a506414c (diff)
downloadcpython-ad7340e8c56f61edc1ff4724fe32c9d831db51a7.zip
cpython-ad7340e8c56f61edc1ff4724fe32c9d831db51a7.tar.gz
cpython-ad7340e8c56f61edc1ff4724fe32c9d831db51a7.tar.bz2
gh-92445 Improve interaction between nargs="*" and choices() (GH-92565)
-rw-r--r--Lib/argparse.py4
-rw-r--r--Lib/test/test_argparse.py7
-rw-r--r--Misc/NEWS.d/next/Library/2022-05-09-21-31-41.gh-issue-92445.tJosdm.rst3
3 files changed, 13 insertions, 1 deletions
diff --git a/Lib/argparse.py b/Lib/argparse.py
index 02e98bb..fe48f86 100644
--- a/Lib/argparse.py
+++ b/Lib/argparse.py
@@ -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]:
diff --git a/Lib/test/test_argparse.py b/Lib/test/test_argparse.py
index 425b6bb..2b7f008 100644
--- a/Lib/test/test_argparse.py
+++ b/Lib/test/test_argparse.py
@@ -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
# ===========================
diff --git a/Misc/NEWS.d/next/Library/2022-05-09-21-31-41.gh-issue-92445.tJosdm.rst b/Misc/NEWS.d/next/Library/2022-05-09-21-31-41.gh-issue-92445.tJosdm.rst
new file mode 100644
index 0000000..ba69a01
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2022-05-09-21-31-41.gh-issue-92445.tJosdm.rst
@@ -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``.