Index: Objects/bytesobject.c =================================================================== --- Objects/bytesobject.c (Revision 58843) +++ Objects/bytesobject.c (Arbeitskopie) @@ -923,6 +923,14 @@ } static PyObject * +bytes_str(PyObject *op) +{ + PyErr_SetString(PyExc_TypeError, + "str() argument must not be a buffer instance."); + return NULL; +} + +static PyObject * bytes_richcompare(PyObject *self, PyObject *other, int op) { Py_ssize_t self_size, other_size; @@ -3063,7 +3071,7 @@ &bytes_as_mapping, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ - (reprfunc)bytes_repr, /* tp_str */ + (reprfunc)bytes_str, /* tp_str */ PyObject_GenericGetAttr, /* tp_getattro */ 0, /* tp_setattro */ &bytes_as_buffer, /* tp_as_buffer */ Index: Objects/stringobject.c =================================================================== --- Objects/stringobject.c (Revision 58843) +++ Objects/stringobject.c (Arbeitskopie) @@ -679,6 +679,14 @@ return PyString_Repr(op, 1); } +static PyObject * +string_str(PyObject *op) +{ + PyErr_SetString(PyExc_TypeError, + "str() argument must not be a byte instance."); + return NULL; +} + static Py_ssize_t string_length(PyStringObject *a) { @@ -3096,7 +3104,7 @@ &string_as_mapping, /* tp_as_mapping */ (hashfunc)string_hash, /* tp_hash */ 0, /* tp_call */ - string_repr, /* tp_str */ + (reprfunc)string_str, /* tp_str */ PyObject_GenericGetAttr, /* tp_getattro */ 0, /* tp_setattro */ &string_as_buffer, /* tp_as_buffer */ Index: Lib/test/test_bytes.py =================================================================== --- Lib/test/test_bytes.py (Revision 58843) +++ Lib/test/test_bytes.py (Arbeitskopie) @@ -86,16 +86,22 @@ self.assertRaises(ValueError, buffer, [sys.maxint+1]) self.assertRaises(ValueError, buffer, [10**100]) - def test_repr_str(self): - for f in str, repr: - self.assertEqual(f(buffer()), "buffer(b'')") - self.assertEqual(f(buffer([0])), "buffer(b'\\x00')") - self.assertEqual(f(buffer([0, 1, 254, 255])), - "buffer(b'\\x00\\x01\\xfe\\xff')") - self.assertEqual(f(b"abc"), "b'abc'") - self.assertEqual(f(b"'"), '''b"'"''') - self.assertEqual(f(b"'\""), r"""b'\'"'""") + def test_repr(self): + self.assertEqual(repr(buffer()), "buffer(b'')") + self.assertEqual(repr(buffer([0])), "buffer(b'\\x00')") + self.assertEqual(repr(buffer([0, 1, 254, 255])), + "buffer(b'\\x00\\x01\\xfe\\xff')") + self.assertEqual(repr(b"abc"), "b'abc'") + self.assertEqual(repr(b"'"), '''b"'"''') + self.assertEqual(repr(b"'\""), r"""b'\'"'""") + def test_str(self): + self.assertRaises(TypeError, str, buffer()) + self.assertRaises(TypeError, str, buffer([0])) + self.assertRaises(TypeError, str, buffer([0, 1, 254, 255])) + self.assertRaises(TypeError, str, b"abc") + self.assertRaises(TypeError, str, b"'") + self.assertRaises(TypeError, str, b"'\"") def test_compare(self): b1 = buffer([1, 2, 3]) @@ -370,11 +376,6 @@ b = buffer(buf) self.assertEqual(b, buffer(sample)) - def test_to_str(self): - self.assertEqual(str(b''), "b''") - self.assertEqual(str(b'x'), "b'x'") - self.assertEqual(str(b'\x80'), "b'\\x80'") - def test_from_int(self): b = buffer(0) self.assertEqual(b, buffer())