mirror of https://github.com/python/cpython
Issue #23681: The -b option now affects comparisons of bytes with int.
This commit is contained in:
parent
ee4c0b9dcf
commit
1dd49824df
|
@ -190,9 +190,12 @@ Miscellaneous options
|
||||||
|
|
||||||
.. cmdoption:: -b
|
.. cmdoption:: -b
|
||||||
|
|
||||||
Issue a warning when comparing str and bytes. Issue an error when the
|
Issue a warning when comparing :class:`bytes` or :class:`bytearray` with
|
||||||
|
:class:`str` or :class:`bytes` with :class:`int`. Issue an error when the
|
||||||
option is given twice (:option:`-bb`).
|
option is given twice (:option:`-bb`).
|
||||||
|
|
||||||
|
.. versionchanged: 3.5
|
||||||
|
Affects comparisons of :class:`bytes` with :class:`int`.
|
||||||
|
|
||||||
.. cmdoption:: -B
|
.. cmdoption:: -B
|
||||||
|
|
||||||
|
|
|
@ -162,6 +162,8 @@ Some smaller changes made to the core Python language are:
|
||||||
error handlers now works with decoding and translating.
|
error handlers now works with decoding and translating.
|
||||||
(Contributed by Serhiy Storchaka in :issue:`19676` and :issue:`22286`.)
|
(Contributed by Serhiy Storchaka in :issue:`19676` and :issue:`22286`.)
|
||||||
|
|
||||||
|
* The :option:`-b` option now affects comparisons of :class:`bytes` with
|
||||||
|
:class:`int`. (Contributed by Serhiy Storchaka in :issue:`23681`)
|
||||||
|
|
||||||
|
|
||||||
New Modules
|
New Modules
|
||||||
|
|
|
@ -1338,20 +1338,35 @@ class AssortedBytesTest(unittest.TestCase):
|
||||||
b = bytearray()
|
b = bytearray()
|
||||||
self.assertFalse(b.replace(b'', b'') is b)
|
self.assertFalse(b.replace(b'', b'') is b)
|
||||||
|
|
||||||
|
@unittest.skipUnless(sys.flags.bytes_warning,
|
||||||
|
"BytesWarning is needed for this test: use -bb option")
|
||||||
def test_compare(self):
|
def test_compare(self):
|
||||||
if sys.flags.bytes_warning:
|
def bytes_warning():
|
||||||
def bytes_warning():
|
return test.support.check_warnings(('', BytesWarning))
|
||||||
return test.support.check_warnings(('', BytesWarning))
|
with bytes_warning():
|
||||||
with bytes_warning():
|
b'' == ''
|
||||||
b'' == ''
|
with bytes_warning():
|
||||||
with bytes_warning():
|
'' == b''
|
||||||
b'' != ''
|
with bytes_warning():
|
||||||
with bytes_warning():
|
b'' != ''
|
||||||
bytearray(b'') == ''
|
with bytes_warning():
|
||||||
with bytes_warning():
|
'' != b''
|
||||||
bytearray(b'') != ''
|
with bytes_warning():
|
||||||
else:
|
bytearray(b'') == ''
|
||||||
self.skipTest("BytesWarning is needed for this test: use -bb option")
|
with bytes_warning():
|
||||||
|
'' == bytearray(b'')
|
||||||
|
with bytes_warning():
|
||||||
|
bytearray(b'') != ''
|
||||||
|
with bytes_warning():
|
||||||
|
'' != bytearray(b'')
|
||||||
|
with bytes_warning():
|
||||||
|
b'\0' == 0
|
||||||
|
with bytes_warning():
|
||||||
|
0 == b'\0'
|
||||||
|
with bytes_warning():
|
||||||
|
b'\0' != 0
|
||||||
|
with bytes_warning():
|
||||||
|
0 != b'\0'
|
||||||
|
|
||||||
# Optimizations:
|
# Optimizations:
|
||||||
# __iter__? (optimization)
|
# __iter__? (optimization)
|
||||||
|
|
|
@ -10,6 +10,8 @@ Release date: 2015-03-28
|
||||||
Core and Builtins
|
Core and Builtins
|
||||||
-----------------
|
-----------------
|
||||||
|
|
||||||
|
- Issue #23681: The -b option now affects comparisons of bytes with int.
|
||||||
|
|
||||||
- Issue #23632: Memoryviews now allow tuple indexing (including for
|
- Issue #23632: Memoryviews now allow tuple indexing (including for
|
||||||
multi-dimensional memoryviews).
|
multi-dimensional memoryviews).
|
||||||
|
|
||||||
|
|
|
@ -1385,14 +1385,23 @@ bytes_richcompare(PyBytesObject *a, PyBytesObject *b, int op)
|
||||||
|
|
||||||
/* Make sure both arguments are strings. */
|
/* Make sure both arguments are strings. */
|
||||||
if (!(PyBytes_Check(a) && PyBytes_Check(b))) {
|
if (!(PyBytes_Check(a) && PyBytes_Check(b))) {
|
||||||
if (Py_BytesWarningFlag && (op == Py_EQ || op == Py_NE) &&
|
if (Py_BytesWarningFlag && (op == Py_EQ || op == Py_NE)) {
|
||||||
(PyObject_IsInstance((PyObject*)a,
|
if (PyObject_IsInstance((PyObject*)a,
|
||||||
(PyObject*)&PyUnicode_Type) ||
|
(PyObject*)&PyUnicode_Type) ||
|
||||||
PyObject_IsInstance((PyObject*)b,
|
PyObject_IsInstance((PyObject*)b,
|
||||||
(PyObject*)&PyUnicode_Type))) {
|
(PyObject*)&PyUnicode_Type)) {
|
||||||
if (PyErr_WarnEx(PyExc_BytesWarning,
|
if (PyErr_WarnEx(PyExc_BytesWarning,
|
||||||
"Comparison between bytes and string", 1))
|
"Comparison between bytes and string", 1))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
}
|
||||||
|
else if (PyObject_IsInstance((PyObject*)a,
|
||||||
|
(PyObject*)&PyLong_Type) ||
|
||||||
|
PyObject_IsInstance((PyObject*)b,
|
||||||
|
(PyObject*)&PyLong_Type)) {
|
||||||
|
if (PyErr_WarnEx(PyExc_BytesWarning,
|
||||||
|
"Comparison between bytes and int", 1))
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
result = Py_NotImplemented;
|
result = Py_NotImplemented;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue