[ python-Bugs-1536021 ] hash(method) sometimes raises OverflowError

SourceForge.net noreply at sourceforge.net
Mon Aug 7 16:21:37 CEST 2006


Bugs item #1536021, was opened at 2006-08-07 14:21
Message generated for change (Tracker Item Submitted) made by Item Submitter
You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=105470&aid=1536021&group_id=5470

Please note that this message will contain a full copy of the comment thread,
including the initial issue submission, for this request,
not just the latest update.
Category: None
Group: Python 2.5
Status: Open
Resolution: None
Priority: 5
Submitted By: Christian Tanzer (tanzer)
Assigned to: Nobody/Anonymous (nobody)
Summary: hash(method) sometimes raises OverflowError

Initial Comment:
I've run into a problem with a big application that I
wasn't able to
reproduce with a small example.

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



----------------------------------------------------------------------

You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=105470&aid=1536021&group_id=5470


More information about the Python-bugs-list mailing list