Функция python isdigit () возвращает true для символа без цифры u '\ u2466'

Я сталкиваюсь с странной проблемой, связанной с функцией python isdigit.

Например:

>>> a = u'\u2466' >>> a.isdigit() Out[1]: True >>> a.isnumeric() Out[2]: True 

Почему этот символ является цифрой?

Любой способ сделать это возвращение False вместо этого, спасибо?


Изменить. Если я не хочу рассматривать его как цифру, то как отфильтровать его?

Например, когда я пытаюсь преобразовать его в int:

 >>> int(u'\u2466') 

Затем произошел UnicodeEncodeError .

    U + 2466 – CIRCLED DIGIT SEVEN (⑦), так что да, это цифра.

    Если ваше определение того, что является цифрой, отличается от определения Консорциума Unicode , вам, возможно, придется написать свой собственный метод isdigit() .

    Изменить. Если я не хочу рассматривать его как цифру, то как отфильтровать его?

    Если вас интересуют только цифры ASCII 09 , вы можете сделать что-то вроде:

     In [4]: s = u'abc 12434 \u2466 5 def' In [5]: u''.join(c for c in s if '0' <= c <= '9') Out[5]: u'124345' 

    Если вы собираетесь конвертировать что-то в int вам нужно isdecimal а не isdigit .

    Обратите внимание, что «decimal» – это не только 0, 1, 2, … 9, есть количество символов, которые могут быть интерпретированы как десятичные цифры и преобразованы в целое число. Пример:

     #coding=utf8 s = u"1٢٣٤5" print s.isdecimal() # True print int(s) # 12345 

    CIRCLED DIGIT SEVEN является CIRCLED DIGIT SEVEN , который является числовым и цифрой.

    Если вы хотите ограничить цифры обычным 0-9, используйте регулярное выражение:

     import re def myIsDigit(s): return re.search("[^0-9]", s) is None