mirror of https://github.com/python/cpython
bpo-44110: Improve string's __getitem__ error message (GH-26042)
This commit is contained in:
parent
7569c0fe91
commit
ed1076428c
|
@ -80,12 +80,14 @@ class BaseTest:
|
|||
self.assertIsNot(obj, realresult)
|
||||
|
||||
# check that obj.method(*args) raises exc
|
||||
def checkraises(self, exc, obj, methodname, *args):
|
||||
def checkraises(self, exc, obj, methodname, *args, expected_msg=None):
|
||||
obj = self.fixtype(obj)
|
||||
args = self.fixtype(args)
|
||||
with self.assertRaises(exc) as cm:
|
||||
getattr(obj, methodname)(*args)
|
||||
self.assertNotEqual(str(cm.exception), '')
|
||||
if expected_msg is not None:
|
||||
self.assertEqual(str(cm.exception), expected_msg)
|
||||
|
||||
# call obj.method(*args) without any checks
|
||||
def checkcall(self, obj, methodname, *args):
|
||||
|
@ -1195,6 +1197,10 @@ class MixinStrUnicodeUserStringTest:
|
|||
|
||||
self.checkraises(TypeError, 'abc', '__getitem__', 'def')
|
||||
|
||||
for idx_type in ('def', object()):
|
||||
expected_msg = "string indices must be integers, not '{}'".format(type(idx_type).__name__)
|
||||
self.checkraises(TypeError, 'abc', '__getitem__', idx_type, expected_msg=expected_msg)
|
||||
|
||||
def test_slice(self):
|
||||
self.checkequal('abc', 'abc', '__getitem__', slice(0, 1000))
|
||||
self.checkequal('abc', 'abc', '__getitem__', slice(0, 3))
|
||||
|
|
|
@ -27,12 +27,14 @@ class UserStringTest(
|
|||
realresult
|
||||
)
|
||||
|
||||
def checkraises(self, exc, obj, methodname, *args):
|
||||
def checkraises(self, exc, obj, methodname, *args, expected_msg=None):
|
||||
obj = self.fixtype(obj)
|
||||
# we don't fix the arguments, because UserString can't cope with it
|
||||
with self.assertRaises(exc) as cm:
|
||||
getattr(obj, methodname)(*args)
|
||||
self.assertNotEqual(str(cm.exception), '')
|
||||
if expected_msg is not None:
|
||||
self.assertEqual(str(cm.exception), expected_msg)
|
||||
|
||||
def checkcall(self, object, methodname, *args):
|
||||
object = self.fixtype(object)
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
Improve :func:`str.__getitem__` error message
|
|
@ -14279,7 +14279,8 @@ unicode_subscript(PyObject* self, PyObject* item)
|
|||
assert(_PyUnicode_CheckConsistency(result, 1));
|
||||
return result;
|
||||
} else {
|
||||
PyErr_SetString(PyExc_TypeError, "string indices must be integers");
|
||||
PyErr_Format(PyExc_TypeError, "string indices must be integers, not '%.200s'",
|
||||
Py_TYPE(item)->tp_name);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue