summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChangaco <changaco@changaco.oy.lc>2018-06-17 09:17:02 +0200
committerChangaco <changaco@changaco.oy.lc>2018-06-17 10:46:34 +0200
commit6bf8745f6a913af71357583e8e97116fcfd444ca (patch)
tree708495ff5243c9a7f19b59ee995f897feb2d6fb6
parentf7ac6530a70ad3b58a85add5ace83131777beb83 (diff)
downloadbabel-6bf8745f6a913af71357583e8e97116fcfd444ca.tar.gz
include more information in error message
-rw-r--r--babel/numbers.py19
-rw-r--r--tests/test_numbers.py3
2 files changed, 18 insertions, 4 deletions
diff --git a/babel/numbers.py b/babel/numbers.py
index 509150c..b0cfe65 100644
--- a/babel/numbers.py
+++ b/babel/numbers.py
@@ -682,7 +682,7 @@ def parse_decimal(string, locale=LC_NUMERIC, strict=False):
>>> parse_decimal('30.00', locale='de', strict=True)
Traceback (most recent call last):
...
- NumberFormatError: '30.00' is not a properly formatted decimal number
+ NumberFormatError: '30.00' is not a properly formatted decimal number. Did you mean '3.000'? Or maybe '30,00'?
:param string: the string to parse
:param locale: the `Locale` object or locale identifier
@@ -702,9 +702,20 @@ def parse_decimal(string, locale=LC_NUMERIC, strict=False):
if strict and group_symbol in string:
proper = format_decimal(parsed, locale=locale, decimal_quantization=False)
if string != proper and string.rstrip('0') != (proper + decimal_symbol):
- raise NumberFormatError(
- "%r is not a properly formatted decimal number" % string
- )
+ try:
+ parsed_alt = decimal.Decimal(string.replace(decimal_symbol, '')
+ .replace(group_symbol, '.'))
+ except decimal.InvalidOperation:
+ raise NumberFormatError(
+ "%r is not a properly formatted decimal number. Did you mean %r?" %
+ (string, proper)
+ )
+ else:
+ proper_alt = format_decimal(parsed_alt, locale=locale, decimal_quantization=False)
+ raise NumberFormatError(
+ "%r is not a properly formatted decimal number. Did you mean %r? Or maybe %r?" %
+ (string, proper, proper_alt)
+ )
return parsed
diff --git a/tests/test_numbers.py b/tests/test_numbers.py
index 50c53de..b9dcb72 100644
--- a/tests/test_numbers.py
+++ b/tests/test_numbers.py
@@ -169,6 +169,9 @@ class NumberParsingTestCase(unittest.TestCase):
# Numbers with a misplaced grouping symbol should be rejected
with self.assertRaises(numbers.NumberFormatError):
numbers.parse_decimal('11.11', locale='de', strict=True)
+ # Numbers with two misplaced grouping symbols should be rejected
+ with self.assertRaises(numbers.NumberFormatError):
+ numbers.parse_decimal('80.00.00', locale='de', strict=True)
# Partially grouped numbers should be rejected
with self.assertRaises(numbers.NumberFormatError):
numbers.parse_decimal('2000,000', locale='en_US', strict=True)