Python 如何检查字符串是否表示数字?
str.isdecimal() 检查十进制字符;整数/浮点转换分别用 int(s)/float(s) 捕获异常。isdigit 不保证能转整数,float 可接受 nan/inf;格式与有限数限制需另行校验。本文给出各方法对比与推荐写法。
十进制字符检查可用 s.isdecimal();验证整数或浮点格式应分别用 int(s)、float(s) 捕获异常,并按业务限定允许的格式。isdigit 支持部分不能转成整数的 Unicode 数字,float 也接受 nan/inf,不能当通用有效数字校验。
方法对比
"123".isdigit() # True
"-123".isdigit() # False(负号不认!)
"12.3".isdigit() # False(小数点不认)
# 按 Python float 语法尝试转换
def is_number(s):
try:
float(s)
return True
except (ValueError, TypeError):
return False
is_number("-12.3") # True
is_number("1e5") # True(科学计数法也是数字)
is_number("abc") # False
isdigit / isdecimal / isnumeric 的区别
"²".isdigit() # True(上标数字)
"⅓".isnumeric() # True(分数字符)
"²".isdecimal() # False
isdecimal 只接受 Unicode 十进制字符,不接受正负号;若只允许 ASCII 数字,可用 ASCII 范围正则。要求有限数时,对 float 结果再用 math.isfinite;大整数不要先转 float,否则可能丢精度。
常见问题(FAQ)
Q:isinstance(s, int) 为什么不行? 那是判断对象类型——这里的前提是输入为字符串。
Q:校验后怎么转? 直接 int(s) 或 float(s),try 块里转换和判断一起完成。