]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
[3.13] gh-121018: Ensure ArgumentParser.parse_args with exit_on_error=False raises...
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Wed, 26 Jun 2024 10:16:19 +0000 (12:16 +0200)
committerGitHub <noreply@github.com>
Wed, 26 Jun 2024 10:16:19 +0000 (10:16 +0000)
(cherry picked from commit 0654336dd5138aec04e3017e15ccbb90a44e053d)

Co-authored-by: blhsing <blhsing@gmail.com>
Lib/argparse.py
Lib/test/test_argparse.py
Misc/NEWS.d/next/Library/2024-06-26-03-04-24.gh-issue-121018.clVSc4.rst [new file with mode: 0644]

index 55bf8cdd875a8d866801eeb5e5ea0eb0f6df071a..64893b53efbfeea36f5b6be69185df90c040c9eb 100644 (file)
@@ -1871,8 +1871,10 @@ class ArgumentParser(_AttributeHolder, _ActionsContainer):
     def parse_args(self, args=None, namespace=None):
         args, argv = self.parse_known_args(args, namespace)
         if argv:
-            msg = _('unrecognized arguments: %s')
-            self.error(msg % ' '.join(argv))
+            msg = _('unrecognized arguments: %s') % ' '.join(argv)
+            if self.exit_on_error:
+                self.error(msg)
+            raise ArgumentError(None, msg)
         return args
 
     def parse_known_args(self, args=None, namespace=None):
index 02b499145f6c431d2c840cda5a0af6b05382f48b..374852949e3e2545c9553097015e48a70196a63c 100644 (file)
@@ -6096,6 +6096,9 @@ class TestExitOnError(TestCase):
         with self.assertRaises(argparse.ArgumentError):
             self.parser.parse_args('--integers a'.split())
 
+    def test_exit_on_error_with_unrecognized_args(self):
+        with self.assertRaises(argparse.ArgumentError):
+            self.parser.parse_args('--foo bar'.split())
 
 def tearDownModule():
     # Remove global references to avoid looking like we have refleaks.
diff --git a/Misc/NEWS.d/next/Library/2024-06-26-03-04-24.gh-issue-121018.clVSc4.rst b/Misc/NEWS.d/next/Library/2024-06-26-03-04-24.gh-issue-121018.clVSc4.rst
new file mode 100644 (file)
index 0000000..fdc3c5f
--- /dev/null
@@ -0,0 +1,2 @@
+Fixed an issue where :meth:`!argparse.ArgumentParser.parses_args` did not honor ``exit_on_error=False`` when given unrecognized arguments.\r
+Patch by Ben Hsing.\r