如何检测Python变量是否为整数(含numpy.int*等特殊类型)
通用整数类型检测方法
在Python中,直接用isinstance(a, int)只能检测普通整数类型,无法匹配numpy等库提供的np.int64、np.int32这类特殊整数类型;而isinstance(b, np.integer)又无法识别普通的int类型。以下是几种通用的解决方法:
方法一:使用标准库numbers.Integral抽象基类
这是最推荐的通用方案,Python标准库numbers模块中的Integral抽象基类会被所有符合整数规范的类型(包括普通int、numpy整数类型,以及其他遵循规范的第三方库整数类型)注册,能实现真正的通用检测。
from numbers import Integral import numpy as np # 测试普通整数 a = 1 print(isinstance(a, Integral)) # 输出:True # 测试numpy整数类型 b = np.int64(1) c = np.int32(2) print(isinstance(b, Integral)) # 输出:True print(isinstance(c, Integral)) # 输出:True
方法二:组合类型元组(仅兼容普通int和numpy整数)
如果只需要兼容普通int和numpy的整数类型,可以直接将两种类型放进元组中进行判断:
import numpy as np def is_integer(x): return isinstance(x, (int, np.integer)) a = 1 b = np.int64(1) print(is_integer(a)) # 输出:True print(is_integer(b)) # 输出:True
注意:这种方法仅覆盖指定的类型,无法兼容其他第三方库的自定义整数类型。
方法三:通过转换验证(需注意浮点数场景)
通过尝试将对象转换为整数并验证是否与原对象相等,这种方法能覆盖更多场景,但需要处理浮点数的特殊情况(比如2.0会被误判为整数):
基础版本(包含浮点数整数)
def is_integer(x): try: return int(x) == x except (ValueError, TypeError): return False import numpy as np a = 1 b = np.int64(1) c = 2.0 d = "3" print(is_integer(a)) # 输出:True print(is_integer(b)) # 输出:True print(is_integer(c)) # 输出:True print(is_integer(d)) # 输出:False
排除浮点数的版本
如果需要排除2.0这类浮点数,可以先判断类型:
def is_integer(x): if isinstance(x, float): return False try: return int(x) == x except (ValueError, TypeError): return False print(is_integer(2.0)) # 输出:False
内容的提问来源于stack exchange,提问作者Thomas Arildsen
相关产品推荐
相关产品推荐

