我试图使用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才有效。有什么原因吗?
答案 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 documentation,isnumeric
仅适用于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 subscript
,superscript
和fractions
也被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个以上的链接,我就会更新这篇文章。