From cff01c7fd0f172afa8db1c32ed48c45d2eb815ee Mon Sep 17 00:00:00 2001 From: Ben Hsing Date: Wed, 26 Jun 2024 03:00:24 +0000 Subject: [PATCH 1/3] ensure ArgumentParser.parse_args raises instead of exiting when given unrecognized args --- Lib/argparse.py | 6 ++++-- Lib/test/test_argparse.py | 3 +++ 2 files changed, 7 insertions(+), 2 deletions(-) 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..96df4322fb2779 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_unrecoginized_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. From fc66223d3d5d89517ce4727951401930707aaf59 Mon Sep 17 00:00:00 2001 From: "blurb-it[bot]" <43283697+blurb-it[bot]@users.noreply.github.com> Date: Wed, 26 Jun 2024 03:04:28 +0000 Subject: [PATCH 2/3] =?UTF-8?q?=F0=9F=93=9C=F0=9F=A4=96=20Added=20by=20blu?= =?UTF-8?q?rb=5Fit.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../next/Library/2024-06-26-03-04-24.gh-issue-121018.clVSc4.rst | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 Misc/NEWS.d/next/Library/2024-06-26-03-04-24.gh-issue-121018.clVSc4.rst 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 From ffa758b184e18ff5683b8ee389cd98cffc1d5cc5 Mon Sep 17 00:00:00 2001 From: blhsing Date: Wed, 26 Jun 2024 11:10:14 +0800 Subject: [PATCH 3/3] fixed typo --- Lib/test/test_argparse.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Lib/test/test_argparse.py b/Lib/test/test_argparse.py index 96df4322fb2779..11eb081f45701e 100644 --- a/Lib/test/test_argparse.py +++ b/Lib/test/test_argparse.py @@ -6053,7 +6053,7 @@ 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_unrecoginized_args(self): + def test_exit_on_error_with_unrecognized_args(self): with self.assertRaises(argparse.ArgumentError): self.parser.parse_args('--foo bar'.split())