mirror of
https://github.com/python/cpython.git
synced 2025-08-04 00:48:58 +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):
|
||||
raise ValueError
|
||||
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):
|
||||
self.assertEqual(
|
||||
|
|
|
@ -12,6 +12,9 @@ What's New in Python 3.1 alpha 0
|
|||
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 #1717: Removed builtin cmp() function, dropped tp_compare
|
||||
|
|
|
@ -4618,7 +4618,7 @@ slot_sq_length(PyObject *self)
|
|||
|
||||
if (res == NULL)
|
||||
return -1;
|
||||
len = PyLong_AsSsize_t(res);
|
||||
len = PyNumber_AsSsize_t(res, PyExc_OverflowError);
|
||||
Py_DECREF(res);
|
||||
if (len < 0) {
|
||||
if (!PyErr_Occurred())
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue