integer subclass range behavior

josepharmbruster at gmail.com josepharmbruster at gmail.com
Wed Dec 19 16:11:49 EST 2007


I was wondering what would happen, so I tried this out for the heck of
it with:
Python 3.0a2 (py3k:59572M, Dec 19 2007, 15:54:07) [MSC v.1500 32 bit
(Intel)] on win32

class a(int):
  def __new__(cls,number):
    return int.__new__(cls,number)

for x in range(0,a(5)):
  print(x)


Which resulted in a:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "a.py", line 5, in <module>
    for x in range(0,a(5)):
SystemError: ..\Objects\longobject.c:400: bad argument to internal
function
[41030 refs]


It looks like the rangeobject performs a FitsInLong test on each of
the parameters to range, which uses the function
_PyLong_FitsInLong(PyObject *vv) within longobject.c.  In tern, this
performs a typecheck:  #define PyLong_CheckExact(op) (Py_TYPE(op) ==
&PyLong_Type) that fails.


Interesting!



More information about the Python-list mailing list