10

我正在尝试使用该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

4 回答 4

15

只是名字不同而已。

'1'.isdigit() 真

于 2013-05-31T18:38:13.113 回答
5

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

链接: http: //pythoncentral.io/how-to-check-if-a-string-is-a-number-in-python-include-unicode/

于 2013-05-31T18:42:07.583 回答
4

根据Python 文档isnumeric仅适用于 unicode 对象:

以下方法仅存在于 unicode 对象上:

unicode.isnumeric()

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

于 2013-05-31T18:39:36.137 回答
2

isnumeric()扩展了对Unicode 字符串中不同数字系统的支持。

在美洲和欧洲,使用由 0123456789 位组成的印度-阿拉伯数字系统。

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

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

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

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

Unicode subscriptsuperscript并且fractions也被该isnumeric()函数视为有效数字。


您可以使用下面的 isumeric() 函数来检查字符串是否为非 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 个链接到这个答案,我就会更新这篇文章。

于 2015-09-08T11:18:33.380 回答