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

This commit is contained in:
blhsing 2024-06-26 15:41:51 +08:00 committed by GitHub
parent 82235449b8
commit 0654336dd5
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 9 additions and 2 deletions

View File

@ -1843,8 +1843,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):

View File

@ -6053,6 +6053,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.

View File

@ -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