Python 如何检查字符串是否表示数字?

str.isdecimal() 检查十进制字符;整数/浮点转换分别用 int(s)/float(s) 捕获异常。isdigit 不保证能转整数,float 可接受 nan/inf;格式与有限数限制需另行校验。本文给出各方法对比与推荐写法。

最佳实践
Python 如何检查字符串是否表示数字?封面

十进制字符检查可用 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 块里转换和判断一起完成。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台