Skip to content

Commit 0654336

Browse files
authored
gh-121018: Ensure ArgumentParser.parse_args with exit_on_error=False raises instead of exiting when given unrecognized arguments (GH-121019)
1 parent 8223544 commit 0654336

File tree

3 files changed

+9
-2
lines changed

3 files changed

+9
-2
lines changed

Lib/argparse.py

+4-2
Original file line numberDiff line numberDiff line change
@@ -1843,8 +1843,10 @@ def _get_positional_actions(self):
18431843
def parse_args(self, args=None, namespace=None):
18441844
args, argv = self.parse_known_args(args, namespace)
18451845
if argv:
1846-
msg = _('unrecognized arguments: %s')
1847-
self.error(msg % ' '.join(argv))
1846+
msg = _('unrecognized arguments: %s') % ' '.join(argv)
1847+
if self.exit_on_error:
1848+
self.error(msg)
1849+
raise ArgumentError(None, msg)
18481850
return args
18491851

18501852
def parse_known_args(self, args=None, namespace=None):

Lib/test/test_argparse.py

+3
Original file line numberDiff line numberDiff line change
@@ -6053,6 +6053,9 @@ def test_exit_on_error_with_bad_args(self):
60536053
with self.assertRaises(argparse.ArgumentError):
60546054
self.parser.parse_args('--integers a'.split())
60556055

6056+
def test_exit_on_error_with_unrecognized_args(self):
6057+
with self.assertRaises(argparse.ArgumentError):
6058+
self.parser.parse_args('--foo bar'.split())
60566059

60576060
def tearDownModule():
60586061
# Remove global references to avoid looking like we have refleaks.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Fixed an issue where :func:`argparse.ArgumentParser.parses_args` did not honor ``exit_on_error=False`` when given unrecognized arguments.
2+
Patch by Ben Hsing

0 commit comments

Comments
 (0)