[Python-Dev] 2.5 status

tanzer at swing.co.at tanzer at swing.co.at
Mon Aug 7 16:26:03 CEST 2006


"Neal Norwitz" <nnorwitz at gmail.com> wrote:

> Things are getting better, but we still have some really important
> outstanding issues.  PLEASE CONTINUE TESTING AS MUCH AS POSSIBLE.

I've run into a problem with a big application that I wasn't able to
reproduce with a small example. I've submitted a bug report to
Sourceforge (Id 1536021)*.

As Sourceforge seems to mangle the code I used to describe the
problem, I'll include it here once more:

    The code (exception handler added to demonstrate and work around
    the problem):

                try :
                    h = hash(p)
                except OverflowError, e:
                    print type(p), p, id(p), e
                    h = id(p) & 0x0FFFFFFF

    prints the following output:

    <type 'instancemethod'>
        <bound method Script_Category.is_applicable of
           <Script_Menu_Mgr.Script_Category object at 0xb6cb4f8c>>
           3066797028 long int too large to convert to int

    This happens with Python 2.5b3, but didn't happen with Python 2.4.3.

    I assume that the hash-function for function/methods returns the
    `id` of the function. The following code demonstrates the same
    problem with a Python class whose `__hash__` returns the `id` of
    the object:

    $ python2.4
        Python 2.4.3 (#1, Jun 30 2006, 10:02:59)
        [GCC 3.4.6 (Gentoo 3.4.6-r1, ssp-3.4.5-1.0, pie-8.7.9)] on linux2
        Type "help", "copyright", "credits" or "license" for more information.
        >>> class X(object):
        ...   def __hash__(self): return id(self)
        ...
        >>> hash (X())
        -1211078036
    $ python2.5
        Python 2.5b3 (r25b3:51041, Aug  7 2006, 15:35:35)
        [GCC 3.4.6 (Gentoo 3.4.6-r1, ssp-3.4.5-1.0, pie-8.7.9)] on linux2
        Type "help", "copyright", "credits" or "license" for more information.
        >>> class X(object):
        ...   def __hash__(self): return id(self)
        ...
        >>> hash (X())
        Traceback (most recent call last):
          File "<stdin>", line 1, in <module>
        OverflowError: long int too large to convert to int

(*) http://sourceforge.net/tracker/index.php?func=detail&aid=1536021&group_id=5470&atid=105470


-- 
Christian Tanzer                                    http://www.c-tanzer.at/



More information about the Python-Dev mailing list