Python str.isdigit()方法处理字符串的判定规则及特殊场景疑问
str.isdigit() 判定规则与int转换异常原因说明
一、str.isdigit() 的预期行为逻辑
str.isdigit()完全依据Unicode官方的字符属性分类做判定:只要字符被归类为「数字类(Decimal Digit)」,就会返回True,和字符是否符合十进制整数的解析规则无关。- 它的判定覆盖范围远大于常用的ASCII 0-9阿拉伯数字,上标数字、下标数字、其他语种的原生数字字符(如泰文数字、全角中文数字)都会被判定为数字,返回
True。
二、判定为数字却无法转int的核心原因
int()函数的十进制转换逻辑只支持ASCII范围内的0-9字符(对应Unicode编码U+0030 ~ U+0039),不在这个范围内的数字类字符都不会被识别为合法的整数字面量。- 你测试的上标二(U+00B2)、上标三(U+00B3)属于Unicode定义的数字类字符,满足
isdigit()的判定规则,但不在ASCII 0-9的编码范围内,因此转换为int时会抛出值错误。
补充说明:如果你的实际需求是判断字符串是否可以直接转换为十进制整数,不要依赖
isdigit()的返回结果,更稳妥的方案是直接做转换并捕获ValueError异常。
内容的提问来源于stack exchange,提问作者Lacobus
相关产品推荐
相关产品推荐

