diff -r 2266e349692c Lib/test/test_csv.py --- a/Lib/test/test_csv.py Mon Jan 11 09:16:58 2016 +0200 +++ b/Lib/test/test_csv.py Mon Jan 11 19:48:53 2016 +0200 @@ -429,13 +429,18 @@ class TestDialectRegistry(unittest.TestC def test_copy(self): for name in csv.list_dialects(): dialect = csv.get_dialect(name) - self.assertRaises(TypeError, copy.copy, dialect) + with self.assertWarns(RuntimeWarning): + copy.copy(dialect) def test_pickle(self): for name in csv.list_dialects(): dialect = csv.get_dialect(name) - for proto in range(pickle.HIGHEST_PROTOCOL + 1): - self.assertRaises(TypeError, pickle.dumps, dialect, proto) + for proto in range(2): + with self.assertRaises(TypeError): + pickle.dumps(dialect, proto) + for proto in range(2, pickle.HIGHEST_PROTOCOL + 1): + with self.assertWarns(RuntimeWarning): + pickle.dumps(dialect, proto) class TestCsvBase(unittest.TestCase): def readerAssertEqual(self, input, expected_result): diff -r 2266e349692c Lib/test/test_memoryview.py --- a/Lib/test/test_memoryview.py Mon Jan 11 09:16:58 2016 +0200 +++ b/Lib/test/test_memoryview.py Mon Jan 11 19:48:53 2016 +0200 @@ -523,14 +523,20 @@ class OtherTest(unittest.TestCase): def test_copy(self): m = memoryview(b'abc') - with self.assertRaises(TypeError): + with self.assertRaises(TypeError), \ + self.assertWarns(RuntimeWarning): copy.copy(m) def test_pickle(self): m = memoryview(b'abc') - for proto in range(pickle.HIGHEST_PROTOCOL + 1): + for proto in range(2): with self.assertRaises(TypeError): pickle.dumps(m, proto) + for proto in range(2, pickle.HIGHEST_PROTOCOL + 1): + with self.assertWarns(RuntimeWarning): + p = pickle.dumps(m, proto) + with self.assertRaises(TypeError): + pickle.loads(p) if __name__ == "__main__": diff -r 2266e349692c Objects/typeobject.c --- a/Objects/typeobject.c Mon Jan 11 09:16:58 2016 +0200 +++ b/Objects/typeobject.c Mon Jan 11 19:48:53 2016 +0200 @@ -3836,10 +3836,10 @@ Py_LOCAL(PyObject *) PyErr_Clear(); if (required && obj->ob_type->tp_itemsize) { - PyErr_Format(PyExc_TypeError, - "can't pickle %.200s objects", - Py_TYPE(obj)->tp_name); - return NULL; + if (PyErr_WarnFormat(PyExc_RuntimeWarning, 1, + "pickled %.200s objects can't be correctly unpickled", + Py_TYPE(obj)->tp_name) < 0) + return NULL; } { @@ -3875,12 +3875,13 @@ Py_LOCAL(PyObject *) if (slotnames != Py_None) basicsize += sizeof(PyObject *) * Py_SIZE(slotnames); if (obj->ob_type->tp_basicsize > basicsize) { - Py_DECREF(slotnames); - Py_DECREF(state); - PyErr_Format(PyExc_TypeError, - "can't pickle %.200s objects", - Py_TYPE(obj)->tp_name); - return NULL; + if (PyErr_WarnFormat(PyExc_RuntimeWarning, 1, + "pickled %.200s objects can't be correctly unpickled", + Py_TYPE(obj)->tp_name) < 0) { + Py_DECREF(slotnames); + Py_DECREF(state); + return NULL; + } } }