mirror of https://github.com/python/cpython
bpo-34984: Improve error messages for bytes and bytearray constructors. (GH-9874)
This commit is contained in:
parent
914f9a078f
commit
2c2044e789
|
@ -169,6 +169,8 @@ class BaseBytesTest:
|
||||||
self.assertRaises(TypeError, self.type2test, [0.0])
|
self.assertRaises(TypeError, self.type2test, [0.0])
|
||||||
self.assertRaises(TypeError, self.type2test, [None])
|
self.assertRaises(TypeError, self.type2test, [None])
|
||||||
self.assertRaises(TypeError, self.type2test, [C()])
|
self.assertRaises(TypeError, self.type2test, [C()])
|
||||||
|
self.assertRaises(TypeError, self.type2test, encoding='ascii')
|
||||||
|
self.assertRaises(TypeError, self.type2test, errors='ignore')
|
||||||
self.assertRaises(TypeError, self.type2test, 0, 'ascii')
|
self.assertRaises(TypeError, self.type2test, 0, 'ascii')
|
||||||
self.assertRaises(TypeError, self.type2test, b'', 'ascii')
|
self.assertRaises(TypeError, self.type2test, b'', 'ascii')
|
||||||
self.assertRaises(TypeError, self.type2test, 0, errors='ignore')
|
self.assertRaises(TypeError, self.type2test, 0, errors='ignore')
|
||||||
|
|
|
@ -783,7 +783,9 @@ bytearray_init(PyByteArrayObject *self, PyObject *args, PyObject *kwds)
|
||||||
if (arg == NULL) {
|
if (arg == NULL) {
|
||||||
if (encoding != NULL || errors != NULL) {
|
if (encoding != NULL || errors != NULL) {
|
||||||
PyErr_SetString(PyExc_TypeError,
|
PyErr_SetString(PyExc_TypeError,
|
||||||
"encoding or errors without sequence argument");
|
encoding != NULL ?
|
||||||
|
"encoding without a string argument" :
|
||||||
|
"errors without a string argument");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -812,7 +814,9 @@ bytearray_init(PyByteArrayObject *self, PyObject *args, PyObject *kwds)
|
||||||
/* If it's not unicode, there can't be encoding or errors */
|
/* If it's not unicode, there can't be encoding or errors */
|
||||||
if (encoding != NULL || errors != NULL) {
|
if (encoding != NULL || errors != NULL) {
|
||||||
PyErr_SetString(PyExc_TypeError,
|
PyErr_SetString(PyExc_TypeError,
|
||||||
"encoding or errors without a string argument");
|
encoding != NULL ?
|
||||||
|
"encoding without a string argument" :
|
||||||
|
"errors without a string argument");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -860,8 +864,14 @@ bytearray_init(PyByteArrayObject *self, PyObject *args, PyObject *kwds)
|
||||||
|
|
||||||
/* Get the iterator */
|
/* Get the iterator */
|
||||||
it = PyObject_GetIter(arg);
|
it = PyObject_GetIter(arg);
|
||||||
if (it == NULL)
|
if (it == NULL) {
|
||||||
|
if (PyErr_ExceptionMatches(PyExc_TypeError)) {
|
||||||
|
PyErr_Format(PyExc_TypeError,
|
||||||
|
"cannot convert '%.200s' object to bytearray",
|
||||||
|
arg->ob_type->tp_name);
|
||||||
|
}
|
||||||
return -1;
|
return -1;
|
||||||
|
}
|
||||||
iternext = *Py_TYPE(it)->tp_iternext;
|
iternext = *Py_TYPE(it)->tp_iternext;
|
||||||
|
|
||||||
/* Run the iterator to exhaustion */
|
/* Run the iterator to exhaustion */
|
||||||
|
@ -1626,8 +1636,14 @@ bytearray_extend(PyByteArrayObject *self, PyObject *iterable_of_ints)
|
||||||
}
|
}
|
||||||
|
|
||||||
it = PyObject_GetIter(iterable_of_ints);
|
it = PyObject_GetIter(iterable_of_ints);
|
||||||
if (it == NULL)
|
if (it == NULL) {
|
||||||
|
if (PyErr_ExceptionMatches(PyExc_TypeError)) {
|
||||||
|
PyErr_Format(PyExc_TypeError,
|
||||||
|
"can't extend bytearray with %.100s",
|
||||||
|
iterable_of_ints->ob_type->tp_name);
|
||||||
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
/* Try to determine the length of the argument. 32 is arbitrary. */
|
/* Try to determine the length of the argument. 32 is arbitrary. */
|
||||||
buf_size = PyObject_LengthHint(iterable_of_ints, 32);
|
buf_size = PyObject_LengthHint(iterable_of_ints, 32);
|
||||||
|
|
|
@ -2537,8 +2537,9 @@ bytes_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
|
||||||
if (x == NULL) {
|
if (x == NULL) {
|
||||||
if (encoding != NULL || errors != NULL) {
|
if (encoding != NULL || errors != NULL) {
|
||||||
PyErr_SetString(PyExc_TypeError,
|
PyErr_SetString(PyExc_TypeError,
|
||||||
"encoding or errors without sequence "
|
encoding != NULL ?
|
||||||
"argument");
|
"encoding without a string argument" :
|
||||||
|
"errors without a string argument");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
return PyBytes_FromStringAndSize(NULL, 0);
|
return PyBytes_FromStringAndSize(NULL, 0);
|
||||||
|
|
Loading…
Reference in New Issue