带有铸造int的怪异行为

时间:2019-02-13 22:05:55

标签: python python-3.6

我正在使用Python 3.6.3,使用以下代码,从int()isdigit()遇到奇怪的行为:

s = "..... not less than 66²/ 3 % of ......"
total = 0
for c in s:
    if c.isdigit():
        total += int(c)

ValueError: invalid literal for int() with base 10: '²'

我了解该错误,并且知道可以使用try catch跳过该错误。我的问题是,如果isdigit()返回true,则应将char \ string强制转换为没有错误,或者isdigit()应该返回false。否则,int()isdigit()应该是连贯的。

1 个答案:

答案 0 :(得分:3)

这正是as documented

  

str.isdigit()如果字符串中的所有字符都是数字,则返回true   并且至少有一个字符,否则为false。数字包括   需要特殊处理的十进制字符和数字,例如   兼容性上标数字。这涵盖了不能   用于形成以10为底的数字,例如Kharosthi数字。正式地   一个数字是具有属性值Numeric_Type = Digit的字符   或Numeric_Type =十进制。