https://github.com/python/cpython/commit/0654336dd5138aec04e3017e15ccbb90a44e053d
commit: 0654336dd5138aec04e3017e15ccbb90a44e053d
branch: main
author: blhsing <[email protected]>
committer: serhiy-storchaka <[email protected]>
date: 2024-06-26T10:41:51+03:00
summary:

gh-121018: Ensure ArgumentParser.parse_args with exit_on_error=False raises 
instead of exiting when given unrecognized arguments (GH-121019)

files:
A Misc/NEWS.d/next/Library/2024-06-26-03-04-24.gh-issue-121018.clVSc4.rst
M Lib/argparse.py
M Lib/test/test_argparse.py

diff --git a/Lib/argparse.py b/Lib/argparse.py
index cdd29d3ad568e5..f1c3808869aab3 100644
--- a/Lib/argparse.py
+++ b/Lib/argparse.py
@@ -1843,8 +1843,10 @@ def _get_positional_actions(self):
     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):
diff --git a/Lib/test/test_argparse.py b/Lib/test/test_argparse.py
index eb1a9f5146beb4..11eb081f45701e 100644
--- a/Lib/test/test_argparse.py
+++ b/Lib/test/test_argparse.py
@@ -6053,6 +6053,9 @@ def test_exit_on_error_with_bad_args(self):
         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
index 00000000000000..f311077d6bfc41
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2024-06-26-03-04-24.gh-issue-121018.clVSc4.rst
@@ -0,0 +1,2 @@
+Fixed an issue where :func:`argparse.ArgumentParser.parses_args` did not honor 
``exit_on_error=False`` when given unrecognized arguments.
+Patch by Ben Hsing

_______________________________________________
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]

Reply via email to