From: Savannah Ostrowski Date: Mon, 23 Sep 2024 18:16:55 +0000 (-0700) Subject: GH-124321: Fix argparse negative number parsing to capture -.5(GH-124322) X-Git-Tag: v3.14.0a1~401 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=dc48312717142ec902197da504fad333f13c9937;p=thirdparty%2FPython%2Fcpython.git GH-124321: Fix argparse negative number parsing to capture -.5(GH-124322) Co-authored-by: Adam Turner <9087854+AA-Turner@users.noreply.github.com> --- diff --git a/Lib/argparse.py b/Lib/argparse.py index 7988c447d035..b77da29417b9 100644 --- a/Lib/argparse.py +++ b/Lib/argparse.py @@ -1360,7 +1360,7 @@ class _ActionsContainer(object): self._defaults = {} # determines whether an "option" looks like a negative number - self._negative_number_matcher = _re.compile(r'^-\d[\d_]*(\.\d[\d_]*)?$') + self._negative_number_matcher = _re.compile(r'^-(?:\d+(?:_\d+)*(?:\.\d+(?:_\d+)*)?|\.\d+(?:_\d+)*)$') # whether or not there are any optionals that look like negative # numbers -- uses a list so it can be shared and edited diff --git a/Lib/test/test_argparse.py b/Lib/test/test_argparse.py index 138ff19e86ac..37d07968b225 100644 --- a/Lib/test/test_argparse.py +++ b/Lib/test/test_argparse.py @@ -2111,6 +2111,8 @@ class TestNegativeNumber(ParserTestCase): ('--int -1_000_000 --float -1_000_000.0', NS(int=-1000000, float=-1000000.0)), ('--float -1_000.0', NS(int=None, float=-1000.0)), ('--float -1_000_000.0_0', NS(int=None, float=-1000000.0)), + ('--float -.5', NS(int=None, float=-0.5)), + ('--float -.5_000', NS(int=None, float=-0.5)), ] class TestInvalidAction(TestCase):