[ 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