integer subclass range behavior

J

josepharmbruster

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!
 
G

Gabriel Genellina

En Wed, 19 Dec 2007 18:11:49 -0300, (e-mail address removed)
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

Interesting!

Yes. But much more interesting would be to report this on the bug tracker
http://bugs.python.org else it will fade away...
 
J

josepharmbruster

En Wed, 19 Dec 2007 18:11:49 -0300, (e-mail address removed)
<[email protected]> escribió:


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
Interesting!

Yes. But much more interesting would be to report this on the bug tracker http://bugs.python.orgelse it will fade away...


Gabriel,

I usually do that... But from what i've learned, most things i've
thought are bugs, turn out to be that way for a good reason. I was
playing it safe on this one :)

Joseph Armbruster
 
G

Gabriel Genellina

En Wed, 19 Dec 2007 22:20:17 -0300, (e-mail address removed)
En Wed, 19 Dec 2007 18:11:49 -0300, (e-mail address removed)
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
Interesting!

Yes. But much more interesting would be to report this on the bug
tracker http://bugs.python.org else it will fade away...
I usually do that... But from what i've learned, most things i've
thought are bugs, turn out to be that way for a good reason. I was
playing it safe on this one :)

Well, it works on 2.5, and I don't see why it should not work on 3.0 too,
so IMHO this is a genuine bug. That means only that when some god or
demi-god explains the good reasons for this failure, we both will say a
big "Ahhhhh! That was it!" :)
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,743
Messages
2,569,478
Members
44,898
Latest member
BlairH7607

Latest Threads

Top