mirror of
https://github.com/python/cpython.git
synced 2025-11-26 13:22:51 +00:00
Issue #3693: Fix array obscure error message when given a str.
This commit is contained in:
parent
ed7dc14d6a
commit
9730e33535
3 changed files with 43 additions and 18 deletions
|
|
@ -1027,6 +1027,18 @@ class BaseTest:
|
||||||
basesize = support.calcvobjsize('Pn2Pi')
|
basesize = support.calcvobjsize('Pn2Pi')
|
||||||
support.check_sizeof(self, a, basesize)
|
support.check_sizeof(self, a, basesize)
|
||||||
|
|
||||||
|
def test_initialize_with_unicode(self):
|
||||||
|
if self.typecode != 'u':
|
||||||
|
with self.assertRaises(TypeError) as cm:
|
||||||
|
a = array.array(self.typecode, 'foo')
|
||||||
|
self.assertIn("cannot use a str", str(cm.exception))
|
||||||
|
with self.assertRaises(TypeError) as cm:
|
||||||
|
a = array.array(self.typecode, array.array('u', 'foo'))
|
||||||
|
self.assertIn("cannot use a unicode array", str(cm.exception))
|
||||||
|
else:
|
||||||
|
a = array.array(self.typecode, "foo")
|
||||||
|
a = array.array(self.typecode, array.array('u', 'foo'))
|
||||||
|
|
||||||
|
|
||||||
class StringTest(BaseTest):
|
class StringTest(BaseTest):
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -18,6 +18,10 @@ Core and Builtins
|
||||||
Library
|
Library
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
- Issue #3693: Make the error message more helpful when the array.array()
|
||||||
|
constructor is given a str. Move the array module typecode documentation to
|
||||||
|
the docstring of the constructor.
|
||||||
|
|
||||||
- Issue #19698: Removed exec_module() methods from
|
- Issue #19698: Removed exec_module() methods from
|
||||||
importlib.machinery.BuiltinImporter and ExtensionFileLoader.
|
importlib.machinery.BuiltinImporter and ExtensionFileLoader.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2518,6 +2518,20 @@ array_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
|
||||||
if (!PyArg_ParseTuple(args, "C|O:array", &c, &initial))
|
if (!PyArg_ParseTuple(args, "C|O:array", &c, &initial))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
if (initial && c != 'u') {
|
||||||
|
if (PyUnicode_Check(initial)) {
|
||||||
|
PyErr_Format(PyExc_TypeError, "cannot use a str to initialize "
|
||||||
|
"an array with typecode '%c'", c);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
else if (array_Check(initial) &&
|
||||||
|
((arrayobject*)initial)->ob_descr->typecode == 'u') {
|
||||||
|
PyErr_Format(PyExc_TypeError, "cannot use a unicode array to "
|
||||||
|
"initialize an array with typecode '%c'", c);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!(initial == NULL || PyList_Check(initial)
|
if (!(initial == NULL || PyList_Check(initial)
|
||||||
|| PyByteArray_Check(initial)
|
|| PyByteArray_Check(initial)
|
||||||
|| PyBytes_Check(initial)
|
|| PyBytes_Check(initial)
|
||||||
|
|
@ -2644,9 +2658,19 @@ PyDoc_STRVAR(module_doc,
|
||||||
"This module defines an object type which can efficiently represent\n\
|
"This module defines an object type which can efficiently represent\n\
|
||||||
an array of basic values: characters, integers, floating point\n\
|
an array of basic values: characters, integers, floating point\n\
|
||||||
numbers. Arrays are sequence types and behave very much like lists,\n\
|
numbers. Arrays are sequence types and behave very much like lists,\n\
|
||||||
except that the type of objects stored in them is constrained. The\n\
|
except that the type of objects stored in them is constrained.\n");
|
||||||
type is specified at object creation time by using a type code, which\n\
|
|
||||||
is a single character. The following type codes are defined:\n\
|
PyDoc_STRVAR(arraytype_doc,
|
||||||
|
"array(typecode [, initializer]) -> array\n\
|
||||||
|
\n\
|
||||||
|
Return a new array whose items are restricted by typecode, and\n\
|
||||||
|
initialized from the optional initializer value, which must be a list,\n\
|
||||||
|
string or iterable over elements of the appropriate type.\n\
|
||||||
|
\n\
|
||||||
|
Arrays represent basic values and behave very much like lists, except\n\
|
||||||
|
the type of objects stored in them is constrained. The type is specified\n\
|
||||||
|
at object creation time by using a type code, which is a single character.\n\
|
||||||
|
The following type codes are defined:\n\
|
||||||
\n\
|
\n\
|
||||||
Type code C Type Minimum size in bytes \n\
|
Type code C Type Minimum size in bytes \n\
|
||||||
'b' signed integer 1 \n\
|
'b' signed integer 1 \n\
|
||||||
|
|
@ -2670,21 +2694,6 @@ NOTE: The 'q' and 'Q' type codes are only available if the platform \n\
|
||||||
C compiler used to build Python supports 'long long', or, on Windows, \n\
|
C compiler used to build Python supports 'long long', or, on Windows, \n\
|
||||||
'__int64'.\n\
|
'__int64'.\n\
|
||||||
\n\
|
\n\
|
||||||
The constructor is:\n\
|
|
||||||
\n\
|
|
||||||
array(typecode [, initializer]) -- create a new array\n\
|
|
||||||
");
|
|
||||||
|
|
||||||
PyDoc_STRVAR(arraytype_doc,
|
|
||||||
"array(typecode [, initializer]) -> array\n\
|
|
||||||
\n\
|
|
||||||
Return a new array whose items are restricted by typecode, and\n\
|
|
||||||
initialized from the optional initializer value, which must be a list,\n\
|
|
||||||
string or iterable over elements of the appropriate type.\n\
|
|
||||||
\n\
|
|
||||||
Arrays represent basic values and behave very much like lists, except\n\
|
|
||||||
the type of objects stored in them is constrained.\n\
|
|
||||||
\n\
|
|
||||||
Methods:\n\
|
Methods:\n\
|
||||||
\n\
|
\n\
|
||||||
append() -- append a new item to the end of the array\n\
|
append() -- append a new item to the end of the array\n\
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue