https://github.com/python/cpython/commit/70c7e040d4f50219bd2832391e1a98701281fc58
commit: 70c7e040d4f50219bd2832391e1a98701281fc58
branch: main
author: Serhiy Storchaka <[email protected]>
committer: serhiy-storchaka <[email protected]>
date: 2026-03-18T17:04:11+02:00
summary:
gh-66419: Make optional arguments with nargs=REMAINDER consume all arguments
(GH-124509)
It no longer stops at the first '--'.
files:
A Misc/NEWS.d/next/Library/2024-09-25-12-47-50.gh-issue-66419.DVSukU.rst
M Lib/argparse.py
M Lib/test/test_argparse.py
diff --git a/Lib/argparse.py b/Lib/argparse.py
index 296a210ad832da..d91707d9eec546 100644
--- a/Lib/argparse.py
+++ b/Lib/argparse.py
@@ -2623,7 +2623,7 @@ def _get_nargs_pattern(self, action):
# allow any number of options or arguments
elif nargs == REMAINDER:
- nargs_pattern = '([AO]*)' if option else '(.*)'
+ nargs_pattern = '(.*)'
# allow one argument followed by any number of options or arguments
elif nargs == PARSER:
diff --git a/Lib/test/test_argparse.py b/Lib/test/test_argparse.py
index 4526efe4b80ef4..e0c32976fd6f0d 100644
--- a/Lib/test/test_argparse.py
+++ b/Lib/test/test_argparse.py
@@ -6605,6 +6605,20 @@ def test_remainder(self):
args = parser.parse_args(['--foo', 'a', '--', 'b', '--', 'c'])
self.assertEqual(NS(foo='a', bar=['--', 'b', '--', 'c']), args)
+ def test_optional_remainder(self):
+ parser = argparse.ArgumentParser(exit_on_error=False)
+ parser.add_argument('--foo', nargs='...')
+ parser.add_argument('bar', nargs='*')
+
+ args = parser.parse_args(['--', '--foo', 'a', 'b'])
+ self.assertEqual(NS(foo=None, bar=['--foo', 'a', 'b']), args)
+ args = parser.parse_args(['--foo', '--', 'a', 'b'])
+ self.assertEqual(NS(foo=['--', 'a', 'b'], bar=[]), args)
+ args = parser.parse_args(['--foo', 'a', '--', 'b'])
+ self.assertEqual(NS(foo=['a', '--', 'b'], bar=[]), args)
+ args = parser.parse_args(['--foo', 'a', 'b', '--'])
+ self.assertEqual(NS(foo=['a', 'b', '--'], bar=[]), args)
+
def test_subparser(self):
parser = argparse.ArgumentParser(exit_on_error=False)
parser.add_argument('foo')
diff --git
a/Misc/NEWS.d/next/Library/2024-09-25-12-47-50.gh-issue-66419.DVSukU.rst
b/Misc/NEWS.d/next/Library/2024-09-25-12-47-50.gh-issue-66419.DVSukU.rst
new file mode 100644
index 00000000000000..ceac0616599466
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2024-09-25-12-47-50.gh-issue-66419.DVSukU.rst
@@ -0,0 +1,2 @@
+Optional argument with :ref:`nargs` equals to ``argparse.REMAINDER`` now
+consumes all remaining arguments including ``'--'``.
_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3//lists/python-checkins.python.org
Member address: [email protected]