* Fixed `f-string/str.format` error description when using two `,` in format specifier.
Co-authored-by: millefalcon <hanish0019@hmail.com>
from test.support import verbose, TestFailed
import locale
import sys
+import re
import test.support as support
import unittest
self.assertEqual(format(12300050.0, ".6g"), "1.23e+07")
self.assertEqual(format(12300050.0, "#.6g"), "1.23000e+07")
+ def test_with_two_commas_in_format_specifier(self):
+ error_msg = re.escape("Cannot specify ',' with ','.")
+ with self.assertRaisesRegex(ValueError, error_msg):
+ '{:,,}'.format(1)
+
+ def test_with_two_underscore_in_format_specifier(self):
+ error_msg = re.escape("Cannot specify '_' with '_'.")
+ with self.assertRaisesRegex(ValueError, error_msg):
+ '{:__}'.format(1)
+
+ def test_with_a_commas_and_an_underscore_in_format_specifier(self):
+ error_msg = re.escape("Cannot specify both ',' and '_'.")
+ with self.assertRaisesRegex(ValueError, error_msg):
+ '{:,_}'.format(1)
+
+ def test_with_an_underscore_and_a_comma_in_format_specifier(self):
+ error_msg = re.escape("Cannot specify both ',' and '_'.")
+ with self.assertRaisesRegex(ValueError, error_msg):
+ '{:,_}'.format(1)
if __name__ == "__main__":
unittest.main()
import ast
import os
+import re
import types
import decimal
import unittest
with self.assertRaisesRegex(SyntaxError, "f-string: invalid syntax"):
compile("f'{a $ b}'", "?", "exec")
+ def test_with_two_commas_in_format_specifier(self):
+ error_msg = re.escape("Cannot specify ',' with ','.")
+ with self.assertRaisesRegex(ValueError, error_msg):
+ f'{1:,,}'
+
+ def test_with_two_underscore_in_format_specifier(self):
+ error_msg = re.escape("Cannot specify '_' with '_'.")
+ with self.assertRaisesRegex(ValueError, error_msg):
+ f'{1:__}'
+
+ def test_with_a_commas_and_an_underscore_in_format_specifier(self):
+ error_msg = re.escape("Cannot specify both ',' and '_'.")
+ with self.assertRaisesRegex(ValueError, error_msg):
+ f'{1:,_}'
+
+ def test_with_an_underscore_and_a_comma_in_format_specifier(self):
+ error_msg = re.escape("Cannot specify both ',' and '_'.")
+ with self.assertRaisesRegex(ValueError, error_msg):
+ f'{1:,_}'
if __name__ == '__main__':
unittest.main()
--- /dev/null
+Fixes the wrong error description in the error raised by using 2 `,` in
+format string in f-string and :meth:`str.format`.
++pos;
}
if (end-pos && READ_spec(pos) == ',') {
- invalid_comma_and_underscore();
- return 0;
+ if (format->thousands_separators == LT_UNDERSCORE_LOCALE) {
+ invalid_comma_and_underscore();
+ return 0;
+ }
}
/* Parse field precision */