Fix Python – How to determine if a number is any type of int (core or numpy, signed or not)?

Question

I need to test whether a variable is of type `int`, or any of `np.int*`, `np.uint*`, preferably using a single condition (i.e. no `or`).

After some tests, I guess that:

• `isinstance(n, int)` will only match `int` and `np.int32` (or `np.int64` depending on plateform),
• `np.issubdtype(type(n), int)` seems to match all `int` and `np.int*`, but doesn’t match `np.uint*`.

This leads to two questions: will `np.issubdtype` match any kind of signed ints? Can determine in a single check whether a number is any kind of signed or unsigned int?

This is about testing for integers, the test should return `False` for float-likes.

Now we will see solution for issue: How to determine if a number is any type of int (core or numpy, signed or not)?

NumPy provides base classes that you can/should use for subtype-checking, rather than the Python types.

Use `np.integer` to check for any instance of either signed or unsigned integers.

Use `np.signedinteger` and `np.unsignedinteger` to check for signed types or unsigned types.

``````>>> np.issubdtype(np.uint32, np.integer)
True
>>> np.issubdtype(np.uint32, np.signedinteger)
False
>>> np.issubdtype(int, np.integer)
True
>>> np.issubdtype(np.array([1, 2, 3]).dtype, np.integer)
True
``````

All floating or complex number types will return `False` when tested.

`np.issubdtype(np.uint*, int)` will always be `False` because the Python `int` is a signed type.

A useful reference showing the relationship between all of these base classes is found in the documentation here.

This question is answered By – Alex Riley