From 1e35e765321311222f118197c79f2c3937035ffc Mon Sep 17 00:00:00 2001 From: Guido van Rossum Date: Tue, 9 Oct 2007 17:21:10 +0000 Subject: Patch #1049 by Thomas Lee. Changes comparisons between PyBytes and PyUnicode to return unequal instead of raising TypeError. --- Lib/test/test_bytes.py | 12 +++++++----- Objects/bytesobject.c | 4 ++-- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/Lib/test/test_bytes.py b/Lib/test/test_bytes.py index 61950cc..c51a320 100644 --- a/Lib/test/test_bytes.py +++ b/Lib/test/test_bytes.py @@ -130,12 +130,14 @@ class BytesTest(unittest.TestCase): self.assertEqual(str8("abc") < b"ab", False) self.assertEqual(str8("abc") <= b"ab", False) - # Bytes can't be compared to Unicode! + # Byte comparisons with unicode should always fail! # Test this for all expected byte orders and Unicode character sizes - self.assertRaises(TypeError, lambda: b"\0a\0b\0c" == "abc") - self.assertRaises(TypeError, lambda: b"\0\0\0a\0\0\0b\0\0\0c" == "abc") - self.assertRaises(TypeError, lambda: b"a\0b\0c\0" == "abc") - self.assertRaises(TypeError, lambda: b"a\0\0\0b\0\0\0c\0\0\0" == "abc") + self.assertEqual(b"\0a\0b\0c" == "abc", False) + self.assertEqual(b"\0\0\0a\0\0\0b\0\0\0c" == "abc", False) + self.assertEqual(b"a\0b\0c\0" == "abc", False) + self.assertEqual(b"a\0\0\0b\0\0\0c\0\0\0" == "abc", False) + self.assertEqual(bytes() == str(), False) + self.assertEqual(bytes() != str(), True) def test_nohash(self): self.assertRaises(TypeError, hash, bytes()) diff --git a/Objects/bytesobject.c b/Objects/bytesobject.c index c7fe751..da2e23f 100644 --- a/Objects/bytesobject.c +++ b/Objects/bytesobject.c @@ -964,8 +964,8 @@ bytes_richcompare(PyObject *self, PyObject *other, int op) error, even if the comparison is for equality. */ if (PyObject_IsInstance(self, (PyObject*)&PyUnicode_Type) || PyObject_IsInstance(other, (PyObject*)&PyUnicode_Type)) { - PyErr_SetString(PyExc_TypeError, "can't compare bytes and str"); - return NULL; + Py_INCREF(Py_NotImplemented); + return Py_NotImplemented; } self_size = _getbuffer(self, &self_bytes); -- cgit v0.12