Index: Objects/bytesobject.c =================================================================== --- Objects/bytesobject.c (révision 66894) +++ Objects/bytesobject.c (copie de travail) @@ -818,7 +818,7 @@ /* Make sure both arguments are strings. */ if (!(PyBytes_Check(a) && PyBytes_Check(b))) { - if (Py_BytesWarningFlag && (op == Py_EQ) && + if (Py_BytesWarningFlag && (op == Py_EQ || op == Py_NE) && (PyObject_IsInstance((PyObject*)a, (PyObject*)&PyUnicode_Type) || PyObject_IsInstance((PyObject*)b, Index: Objects/bytearrayobject.c =================================================================== --- Objects/bytearrayobject.c (révision 66894) +++ Objects/bytearrayobject.c (copie de travail) @@ -939,7 +939,7 @@ error, even if the comparison is for equality. */ if (PyObject_IsInstance(self, (PyObject*)&PyUnicode_Type) || PyObject_IsInstance(other, (PyObject*)&PyUnicode_Type)) { - if (Py_BytesWarningFlag && op == Py_EQ) { + if (Py_BytesWarningFlag && (op == Py_EQ || op == Py_NE)) { if (PyErr_WarnEx(PyExc_BytesWarning, "Comparison between bytearray and string", 1)) return NULL; Index: Lib/test/test_bytes.py =================================================================== --- Lib/test/test_bytes.py (révision 66894) +++ Lib/test/test_bytes.py (copie de travail) @@ -9,6 +9,7 @@ import re import sys import copy +import operator import pickle import tempfile import unittest @@ -863,6 +864,17 @@ b = bytearray() self.failIf(b.replace(b'', b'') is b) + def test_compare(self): + if sys.flags.bytes_warning: + warnings.simplefilter('error', BytesWarning) + self.assertRaises(BytesWarning, operator.eq, b'', '') + self.assertRaises(BytesWarning, operator.ne, b'', '') + self.assertRaises(BytesWarning, operator.eq, bytearray(b''), '') + self.assertRaises(BytesWarning, operator.ne, bytearray(b''), '') + else: + # raise test.support.TestSkipped("BytesWarning is needed for this test: use -bb option") + pass + # Optimizations: # __iter__? (optimization) # __reversed__? (optimization)