Hi I'm using Python 2.4.4 on 32bit x86 Linux. I have a problem with printing hex string for a value larger than 0x800000000 when the value is given to % operator via an instance of a class with __int__(). If I pass a long value to % operator it works just fine.
Example1 -- pass a long value directly. this works. >>> x=0x80000000 >>> x 2147483648L >>> type(x) <type 'long'> >>> "%08x" % x '80000000' Example2 -- pass an instance of a class with __int__() >>> class X: ... def __init__(self, v): ... self.v = v ... def __int__(self): ... return self.v ... >>> y = X(0x80000000) >>> "%08x" % y Traceback (most recent call last): File "<stdin>", line 1, in ? TypeError: int argument required >>> The behavior looks inconsistent. By the way __int__ actually returned a long type value in the Example2. The "%08x" allows either int or long in the Example1, however it accepts int only in the Example2. Is this a bug or expected? by the way same thing happends on a 64bit system with a value of 0x8000000000000000. Regards, Kenji Noguchi -- http://mail.python.org/mailman/listinfo/python-list