Python 如何检查字符串是否表示数字?
str.isdigit() 判断纯数字;含小数点/负号的用 try float(s) 捕获 ValueError;isnumeric/isdecimal 有细微差别。本文给出各方法对比与推荐写法。
纯整数用 s.isdigit();要兼容负数和小数用 try: float(s) 捕获异常——这是最全面的判断方式。
方法对比
"123".isdigit() # True
"-123".isdigit() # False(负号不认!)
"12.3".isdigit() # False(小数点不认)
# 全面方案:try 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 最严格,isnumeric 最宽松。
常见问题(FAQ)
Q:isinstance(s, int) 为什么不行? 那是判断对象类型——这里的前提是输入为字符串。
Q:校验后怎么转? 直接 int(s) 或 float(s),try 块里转换和判断一起完成。