Index: Objects/typeobject.c =================================================================== --- Objects/typeobject.c (revision 62564) +++ Objects/typeobject.c (working copy) @@ -4567,10 +4567,16 @@ len = PyLong_AsSsize_t(res); Py_DECREF(res); if (len < 0) { - if (!PyErr_Occurred()) - PyErr_SetString(PyExc_ValueError, - "__len__() should return >= 0"); - return -1; + if (PyErr_ExceptionMatches(PyExc_OverflowError)) { + PyErr_Clear(); + len = PY_SSIZE_T_MAX; + } + else { + if (!PyErr_Occurred()) + PyErr_SetString(PyExc_ValueError, + "__len__() should return >= 0"); + return -1; + } } return len; } Index: Objects/rangeobject.c =================================================================== --- Objects/rangeobject.c (revision 62564) +++ Objects/rangeobject.c (working copy) @@ -197,6 +197,10 @@ Py_ssize_t result = -1; if (len) { result = PyLong_AsSsize_t(len); + if (result == -1 && PyErr_ExceptionMatches(PyExc_OverflowError)) { + PyErr_Clear(); + result = PY_SSIZE_T_MAX; + } Py_DECREF(len); } return result;