[Python-Dev] int() and math.trunc don't accept objects that only define __index__
Le 15 mars 2019 ? 03:49:19, Steven D'Aprano
(steve at pearwood.info(mailto:steve at pearwood.info)) a ?crit:
> On Wed, Mar 13, 2019 at 03:21:31AM -0700, R?mi Lapeyre wrote:
> > When __index__ is defined it means that there is a lossless conversion
> > to int possible. In this case, this means a lossless conversion to
> > float and complex is also possible
> That's not correct:
> py> n = 2**64 + 1
> py> n == int(float(n))
Thanks, I should have thought of that. Do you think __index__ should
> Python floats (C doubles) can lose digits when converting from ints
> over 2**53 or so.
> > (with the exception of overflows
> > but anyone doing float(var) should expect them).
> I don't. I expect float(var) to overflow to infinity, if it is going to
> overflow, and always forget that it can raise.
> py> float("9e9999")
> py> float(str(9*10**9999))
> py> float(9*10**9999)
> Traceback (most recent call last):
> File "", line 1, in
> OverflowError: int too large to convert to float
> This never fails to surprise me.
> Python-Dev mailing list
> Python-Dev at python.org
> Unsubscribe: https://mail.python.org/mailman/options/python-dev/remi.lapeyre%40henki.fr