Python isnumeric函数仅适用于unicode

时间:2013-05-31 18:36:30

标签: python

我试图使用isnumeric函数检查字符串是否为数字但结果不符合预期。该函数仅在其为unicode字符串时有效。

>>> a=u'1'
>>> a.isnumeric()
True
>>> a='1'
>>> a.isnumeric()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'str' object has no attribute 'isnumeric'

isnumeric只有在它的unicode才有效。有什么原因吗?

4 个答案:

答案 0 :(得分:14)

只是名字不同。

&#39; 1&#39; .isdigit() 真

答案 1 :(得分:5)

  

通常,您需要检查Python中的字符串是否为数字。这个   一直发生,例如用户输入,从中获取数据   数据库(可以返回一个字符串),或者读取包含的文件   数字。根据您期望的数字类型,您可以   使用几种方法。比如解析字符串,使用正则表达式,或   只是试图将它转换(转换)为数字并看看是什么   发生。 通常你也会遇到编码的非ASCII数字   Unicode格式。这些可能是也可能不是数字。例如2,即2英寸   泰语。然而©只是版权符号,显然不是   号。

link:http://pythoncentral.io/how-to-check-if-a-string-is-a-number-in-python-including-unicode/

答案 2 :(得分:4)

根据Python documentationisnumeric仅适用于unicode对象:

  

以下方法仅适用于unicode对象:

     

unicode.isnumeric()

     

如果S中只有数字字符,则返回True,否则返回False。数字字符包括数字字符,以及具有Unicode数值属性的所有字符,例如, U + 2155,VULGAR FRACTION ONE FIFTH。

答案 3 :(得分:1)

isnumeric()扩展了对Unicode字符串中不同numeral systems的支持。

在美洲和欧洲使用Hindu-Arabic numeral system,其中包含0123456789个数字。

印度语 - 阿拉伯数字也被Unicode称为欧洲数字。

其他数字系统可用,例如:

  • 罗马数字
  • 古希腊数字
  • 泰米尔语数字
  • 日本数字
  • 中文数字
  • 韩国数字

有关数字系统的更多信息,请访问:wikiwand.com/en/Numerals_in_Unicode#/Numerals_by_script

Unicode subscriptsuperscriptfractions也被isnumeric()函数视为有效数字。

您可以使用下面的isnumeric()函数检查字符串是否为非unicode编号。

l = ['abc' + chr(255), 'abc', '123', '45a6', '78b', u"\u2155", '123.4', u'\u2161', u'\u2168']

def isnumeric(s):
    '''Returns True for all non-unicode numbers'''
    try:
        s = s.decode('utf-8')
    except:
        return False

    try:
        float(s)
        return True
    except:
        return False


for i in l:
    print i, 'isnumeric:', isnumeric(i)

print '--------------------'
print u'\u2169', 'isnumeric', u'\u2169'.isnumeric()
print u'\u2165', 'isnumeric', u'\u2165'.isnumeric()

编辑:只要我有足够的声誉为这个答案添加2个以上的链接,我就会更新这篇文章。