mirror of
https://github.com/python/cpython
synced 2026-09-29 12:10:30 +03:00
Issue #25766: Special method __bytes__() now works in str subclasses.
This commit is contained in:
parent
5185597a69
commit
5aac3ed799
3 changed files with 20 additions and 6 deletions
|
|
@ -3175,11 +3175,11 @@ bytes_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
|
|||
return PyBytes_FromStringAndSize(NULL, 0);
|
||||
}
|
||||
|
||||
if (PyUnicode_Check(x)) {
|
||||
if (encoding != NULL) {
|
||||
/* Encode via the codec registry */
|
||||
if (encoding == NULL) {
|
||||
if (!PyUnicode_Check(x)) {
|
||||
PyErr_SetString(PyExc_TypeError,
|
||||
"string argument without an encoding");
|
||||
"encoding without a string argument");
|
||||
return NULL;
|
||||
}
|
||||
new = PyUnicode_AsEncodedString(x, encoding, errors);
|
||||
|
|
@ -3189,10 +3189,11 @@ bytes_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
|
|||
return new;
|
||||
}
|
||||
|
||||
/* If it's not unicode, there can't be encoding or errors */
|
||||
if (encoding != NULL || errors != NULL) {
|
||||
if (errors != NULL) {
|
||||
PyErr_SetString(PyExc_TypeError,
|
||||
"encoding or errors without a string argument");
|
||||
PyUnicode_Check(x) ?
|
||||
"string argument without an encoding" :
|
||||
"errors without a string argument");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
|
@ -3217,6 +3218,11 @@ bytes_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
|
|||
else if (PyErr_Occurred())
|
||||
return NULL;
|
||||
|
||||
if (PyUnicode_Check(x)) {
|
||||
PyErr_SetString(PyExc_TypeError,
|
||||
"string argument without an encoding");
|
||||
return NULL;
|
||||
}
|
||||
/* Is it an integer? */
|
||||
size = PyNumber_AsSsize_t(x, PyExc_OverflowError);
|
||||
if (size == -1 && PyErr_Occurred()) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue