mirror of
https://github.com/python/cpython.git
synced 2025-09-26 18:29:57 +00:00
fix len() when __len__() returns a non number type #5137
This commit is contained in:
parent
c7055a59a6
commit
ee1ae7ccb7
3 changed files with 16 additions and 1 deletions
|
@ -611,6 +611,18 @@ class BuiltinTest(unittest.TestCase):
|
||||||
def __len__(self):
|
def __len__(self):
|
||||||
raise ValueError
|
raise ValueError
|
||||||
self.assertRaises(ValueError, len, BadSeq())
|
self.assertRaises(ValueError, len, BadSeq())
|
||||||
|
class InvalidLen:
|
||||||
|
def __len__(self):
|
||||||
|
return None
|
||||||
|
self.assertRaises(TypeError, len, InvalidLen())
|
||||||
|
class FloatLen:
|
||||||
|
def __len__(self):
|
||||||
|
return 4.5
|
||||||
|
self.assertRaises(TypeError, len, FloatLen())
|
||||||
|
class HugeLen:
|
||||||
|
def __len__(self):
|
||||||
|
return sys.maxsize + 1
|
||||||
|
self.assertRaises(OverflowError, len, HugeLen())
|
||||||
|
|
||||||
def test_map(self):
|
def test_map(self):
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
|
|
|
@ -12,6 +12,9 @@ What's New in Python 3.1 alpha 0
|
||||||
Core and Builtins
|
Core and Builtins
|
||||||
-----------------
|
-----------------
|
||||||
|
|
||||||
|
- Issue #5137: Make len() correctly raise a TypeError when a __len__ method
|
||||||
|
returns a non-number type.
|
||||||
|
|
||||||
- Issue #5182: Removed memoryview.__str__.
|
- Issue #5182: Removed memoryview.__str__.
|
||||||
|
|
||||||
- Issue #1717: Removed builtin cmp() function, dropped tp_compare
|
- Issue #1717: Removed builtin cmp() function, dropped tp_compare
|
||||||
|
|
|
@ -4618,7 +4618,7 @@ slot_sq_length(PyObject *self)
|
||||||
|
|
||||||
if (res == NULL)
|
if (res == NULL)
|
||||||
return -1;
|
return -1;
|
||||||
len = PyLong_AsSsize_t(res);
|
len = PyNumber_AsSsize_t(res, PyExc_OverflowError);
|
||||||
Py_DECREF(res);
|
Py_DECREF(res);
|
||||||
if (len < 0) {
|
if (len < 0) {
|
||||||
if (!PyErr_Occurred())
|
if (!PyErr_Occurred())
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue