From dc48312717142ec902197da504fad333f13c9937 Mon Sep 17 00:00:00 2001 From: Savannah Ostrowski Date: Mon, 23 Sep 2024 11:16:55 -0700 Subject: [PATCH] GH-124321: Fix argparse negative number parsing to capture -.5(GH-124322) Co-authored-by: Adam Turner <9087854+AA-Turner@users.noreply.github.com> --- Lib/argparse.py | 2 +- Lib/test/test_argparse.py | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/Lib/argparse.py b/Lib/argparse.py index 7988c447d03584..b77da29417b920 100644 --- a/Lib/argparse.py +++ b/Lib/argparse.py @@ -1360,7 +1360,7 @@ def __init__(self, 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 138ff19e86acf4..37d07968b22543 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):