Re: integer subclass range behavior
En Wed, 19 Dec 2007 22:20:17 -0300, [EMAIL PROTECTED] <[EMAIL PROTECTED]> escribió: > On Dec 19, 7:42 pm, "Gabriel Genellina" <[EMAIL PROTECTED]> > wrote: >> En Wed, 19 Dec 2007 18:11:49 -0300, [EMAIL PROTECTED] >> <[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 "", line 1, in >> > File "a.py", line 5, in >> > 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 "Ah! That was it!" :) -- Gabriel Genellina -- http://mail.python.org/mailman/listinfo/python-list
Re: integer subclass range behavior
On Dec 19, 7:42 pm, "Gabriel Genellina" <[EMAIL PROTECTED]> wrote: > En Wed, 19 Dec 2007 18:11:49 -0300, [EMAIL PROTECTED] > <[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 "", line 1, in > > File "a.py", line 5, in > > 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 Genellina 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 -- http://mail.python.org/mailman/listinfo/python-list
Re: integer subclass range behavior
En Wed, 19 Dec 2007 18:11:49 -0300, [EMAIL PROTECTED] <[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 "", line 1, in > File "a.py", line 5, in > 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... -- Gabriel Genellina -- http://mail.python.org/mailman/listinfo/python-list
integer subclass range behavior
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 "", line 1, in File "a.py", line 5, in 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! -- http://mail.python.org/mailman/listinfo/python-list