diff options
author | Harry <harry.lees@gmail.com> | 2022-08-25 11:18:38 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-08-25 11:18:38 (GMT) |
commit | ad7340e8c56f61edc1ff4724fe32c9d831db51a7 (patch) | |
tree | d33fb0a381f94cb786c2e9491173810c4572a59e | |
parent | cd492d43a2980faf0ef4a3f99c665023a506414c (diff) | |
download | cpython-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.py | 4 | ||||
-rw-r--r-- | Lib/test/test_argparse.py | 7 | ||||
-rw-r--r-- | Misc/NEWS.d/next/Library/2022-05-09-21-31-41.gh-issue-92445.tJosdm.rst | 3 |
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``. |