mirror of https://github.com/python/cpython
gh-89902: Deprecate non-standard format specifier "N" for Decimal (GH-110508)
It was not documented and only supported in the C implementation.
This commit is contained in:
parent
6780d63ae5
commit
d96a8cdfe2
|
@ -353,6 +353,10 @@ Deprecated
|
||||||
in :data:`~dis.hasarg` instead.
|
in :data:`~dis.hasarg` instead.
|
||||||
(Contributed by Irit Katriel in :gh:`109319`.)
|
(Contributed by Irit Katriel in :gh:`109319`.)
|
||||||
|
|
||||||
|
* Deprecate non-standard format specifier "N" for :class:`decimal.Decimal`.
|
||||||
|
It was not documented and only supported in the C implementation.
|
||||||
|
(Contributed by Serhiy Storchaka in :gh:`89902`.)
|
||||||
|
|
||||||
|
|
||||||
Pending Removal in Python 3.14
|
Pending Removal in Python 3.14
|
||||||
------------------------------
|
------------------------------
|
||||||
|
|
|
@ -1222,6 +1222,23 @@ class FormatTest:
|
||||||
self.assertEqual(get_fmt(Decimal('-1.5'), dotsep_wide, '020n'),
|
self.assertEqual(get_fmt(Decimal('-1.5'), dotsep_wide, '020n'),
|
||||||
'-0\u00b4000\u00b4000\u00b4000\u00b4001\u00bf5')
|
'-0\u00b4000\u00b4000\u00b4000\u00b4001\u00bf5')
|
||||||
|
|
||||||
|
def test_deprecated_N_format(self):
|
||||||
|
Decimal = self.decimal.Decimal
|
||||||
|
h = Decimal('6.62607015e-34')
|
||||||
|
if self.decimal == C:
|
||||||
|
with self.assertWarns(DeprecationWarning) as cm:
|
||||||
|
r = format(h, 'N')
|
||||||
|
self.assertEqual(cm.filename, __file__)
|
||||||
|
self.assertEqual(r, format(h, 'n').upper())
|
||||||
|
with self.assertWarns(DeprecationWarning) as cm:
|
||||||
|
r = format(h, '010.3N')
|
||||||
|
self.assertEqual(cm.filename, __file__)
|
||||||
|
self.assertEqual(r, format(h, '010.3n').upper())
|
||||||
|
else:
|
||||||
|
self.assertRaises(ValueError, format, h, 'N')
|
||||||
|
self.assertRaises(ValueError, format, h, '010.3N')
|
||||||
|
|
||||||
|
|
||||||
@run_with_locale('LC_ALL', 'ps_AF')
|
@run_with_locale('LC_ALL', 'ps_AF')
|
||||||
def test_wide_char_separator_decimal_point(self):
|
def test_wide_char_separator_decimal_point(self):
|
||||||
# locale with wide char separator and decimal point
|
# locale with wide char separator and decimal point
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
Deprecate non-standard format specifier "N" for :class:`decimal.Decimal`. It
|
||||||
|
was not documented and only supported in the C implementation.
|
|
@ -3593,6 +3593,12 @@ dec_format(PyObject *dec, PyObject *args)
|
||||||
if (replace_fillchar) {
|
if (replace_fillchar) {
|
||||||
dec_replace_fillchar(decstring);
|
dec_replace_fillchar(decstring);
|
||||||
}
|
}
|
||||||
|
if (strchr(fmt, 'N') != NULL) {
|
||||||
|
if (PyErr_WarnEx(PyExc_DeprecationWarning,
|
||||||
|
"Format specifier 'N' is deprecated", 1) < 0) {
|
||||||
|
goto finish;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
result = PyUnicode_DecodeUTF8(decstring, size, NULL);
|
result = PyUnicode_DecodeUTF8(decstring, size, NULL);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue