Allow whitespace around a slash in fraction string inputs (GH-96496)

This commit is contained in:
Raymond Hettinger 2022-09-02 11:10:58 -05:00 committed by GitHub
parent 91f40f3f78
commit 656167db81
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 7 additions and 4 deletions

View file

@ -98,6 +98,9 @@ another rational number, or from a string.
:class:`Fraction` implements ``__int__`` now to satisfy
``typing.SupportsInt`` instance checks.
.. versionchanged:: 3.12
Space is allowed around the slash for string inputs: `Fraction('2 / 3')`.
.. attribute:: numerator
Numerator of the Fraction in lowest term.

View file

@ -26,7 +26,7 @@
(?=\d|\.\d) # lookahead for digit or .digit
(?P<num>\d*|\d+(_\d+)*) # numerator (possibly empty)
(?: # followed by
(?:/(?P<denom>\d+(_\d+)*))? # an optional denominator
(?:\s*/\s*(?P<denom>\d+(_\d+)*))? # an optional denominator
| # or
(?:\.(?P<decimal>d*|\d+(_\d+)*))? # an optional fractional part
(?:E(?P<exp>[-+]?\d+(_\d+)*))? # and optional exponent

View file

@ -162,6 +162,7 @@ def testInitFromDecimal(self):
def testFromString(self):
self.assertEqual((5, 1), _components(F("5")))
self.assertEqual((3, 2), _components(F("3/2")))
self.assertEqual((3, 2), _components(F("3 / 2")))
self.assertEqual((3, 2), _components(F(" \n +3/2")))
self.assertEqual((-3, 2), _components(F("-3/2 ")))
self.assertEqual((13, 2), _components(F(" 013/02 \n ")))
@ -190,9 +191,6 @@ def testFromString(self):
self.assertRaisesMessage(
ValueError, "Invalid literal for Fraction: '/2'",
F, "/2")
self.assertRaisesMessage(
ValueError, "Invalid literal for Fraction: '3 /2'",
F, "3 /2")
self.assertRaisesMessage(
# Denominators don't need a sign.
ValueError, "Invalid literal for Fraction: '3/+2'",

View file

@ -0,0 +1,2 @@
Fraction literals now support whitespace around the forward slash,
`Fraction('2 / 3')`.