Kaydet (Commit) 2cd8ce46 authored tarafından Andrew Svetlov's avatar Andrew Svetlov

Issue #9856: Replace deprecation warinigs to raising TypeError in object.__format__

Patch by Florent Xicluna.
üst bf8f2f95
...@@ -1479,17 +1479,11 @@ class BuiltinTest(unittest.TestCase): ...@@ -1479,17 +1479,11 @@ class BuiltinTest(unittest.TestCase):
# -------------------------------------------------------------------- # --------------------------------------------------------------------
# Issue #7994: object.__format__ with a non-empty format string is # Issue #7994: object.__format__ with a non-empty format string is
# deprecated # deprecated
def test_deprecated_format_string(obj, fmt_str, should_raise_warning): def test_deprecated_format_string(obj, fmt_str, should_raise):
with warnings.catch_warnings(record=True) as w: if should_raise:
warnings.simplefilter("always", DeprecationWarning) self.assertRaises(TypeError, format, obj, fmt_str)
format(obj, fmt_str)
if should_raise_warning:
self.assertEqual(len(w), 1)
self.assertIsInstance(w[0].message, DeprecationWarning)
self.assertIn('object.__format__ with a non-empty format '
'string', str(w[0].message))
else: else:
self.assertEqual(len(w), 0) format(obj, fmt_str)
fmt_strs = ['', 's'] fmt_strs = ['', 's']
......
...@@ -842,11 +842,9 @@ class UnicodeTest(string_tests.CommonTest, ...@@ -842,11 +842,9 @@ class UnicodeTest(string_tests.CommonTest,
self.assertEqual('{0:d}'.format(G('data')), 'G(data)') self.assertEqual('{0:d}'.format(G('data')), 'G(data)')
self.assertEqual('{0!s}'.format(G('data')), 'string is data') self.assertEqual('{0!s}'.format(G('data')), 'string is data')
msg = 'object.__format__ with a non-empty format string is deprecated' self.assertRaises(TypeError, '{0:^10}'.format, E('data'))
with support.check_warnings((msg, DeprecationWarning)): self.assertRaises(TypeError, '{0:^10s}'.format, E('data'))
self.assertEqual('{0:^10}'.format(E('data')), ' E(data) ') self.assertRaises(TypeError, '{0:>15s}'.format, G('data'))
self.assertEqual('{0:^10s}'.format(E('data')), ' E(data) ')
self.assertEqual('{0:>15s}'.format(G('data')), ' string is data')
self.assertEqual("{0:date: %Y-%m-%d}".format(I(year=2007, self.assertEqual("{0:date: %Y-%m-%d}".format(I(year=2007,
month=8, month=8,
......
...@@ -3654,16 +3654,9 @@ object_format(PyObject *self, PyObject *args) ...@@ -3654,16 +3654,9 @@ object_format(PyObject *self, PyObject *args)
/* Issue 7994: If we're converting to a string, we /* Issue 7994: If we're converting to a string, we
should reject format specifications */ should reject format specifications */
if (PyUnicode_GET_LENGTH(format_spec) > 0) { if (PyUnicode_GET_LENGTH(format_spec) > 0) {
if (PyErr_WarnEx(PyExc_DeprecationWarning, PyErr_SetString(PyExc_TypeError,
"object.__format__ with a non-empty format "
"string is deprecated", 1) < 0) {
goto done;
}
/* Eventually this will become an error:
PyErr_Format(PyExc_TypeError,
"non-empty format string passed to object.__format__"); "non-empty format string passed to object.__format__");
goto done; goto done;
*/
} }
result = PyObject_Format(self_as_str, format_spec); result = PyObject_Format(self_as_str, format_spec);
...@@ -4288,13 +4281,11 @@ PyType_Ready(PyTypeObject *type) ...@@ -4288,13 +4281,11 @@ PyType_Ready(PyTypeObject *type)
/* Warn for a type that implements tp_compare (now known as /* Warn for a type that implements tp_compare (now known as
tp_reserved) but not tp_richcompare. */ tp_reserved) but not tp_richcompare. */
if (type->tp_reserved && !type->tp_richcompare) { if (type->tp_reserved && !type->tp_richcompare) {
int error; PyErr_Format(PyExc_TypeError,
error = PyErr_WarnFormat(PyExc_DeprecationWarning, 1,
"Type %.100s defines tp_reserved (formerly tp_compare) " "Type %.100s defines tp_reserved (formerly tp_compare) "
"but not tp_richcompare. Comparisons may not behave as intended.", "but not tp_richcompare. Comparisons may not behave as intended.",
type->tp_name); type->tp_name);
if (error == -1) goto error;
goto error;
} }
/* All done -- set the ready flag */ /* All done -- set the ready flag */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment