Jens Jørgen Mortensen
2015-06-18 05:53:31 UTC
Hi!
I just finished porting a large code-base to Python 3 (making it work on
2.6, 2.7 and 3.4). It wasn't that difficult, but one thing gave me a
hard time and it was this:
Python 2.7.9 (default, Apr 2 2015, 15:33:21)
[GCC 4.9.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
With Python 3.4 you get False. I think I understand why (np.int64 is no
longer a subclass of int). So, I did this instead:
import numbers
isinstance(n, numbers.Integral)
which works fine (with numpy-1.9). Is this the "correct" way or is
there a better way to do it? I would imagine that a lot of code will
break because of this - so it would be nice if isinstance(n, int) could
be made to work the same way in 2 and 3, but I don't know if this is
possible (or desirable).
Jens Jørgen
I just finished porting a large code-base to Python 3 (making it work on
2.6, 2.7 and 3.4). It wasn't that difficult, but one thing gave me a
hard time and it was this:
Python 2.7.9 (default, Apr 2 2015, 15:33:21)
[GCC 4.9.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
a = np.zeros(7, int)
n = a[3]
type(n)
<type 'numpy.int64'>n = a[3]
type(n)
isinstance(n, int)
TrueWith Python 3.4 you get False. I think I understand why (np.int64 is no
longer a subclass of int). So, I did this instead:
import numbers
isinstance(n, numbers.Integral)
which works fine (with numpy-1.9). Is this the "correct" way or is
there a better way to do it? I would imagine that a lot of code will
break because of this - so it would be nice if isinstance(n, int) could
be made to work the same way in 2 and 3, but I don't know if this is
possible (or desirable).
Jens Jørgen