我想检查我的值是带有点还是逗号的浮点数,但是isdigit()返回带有点的false。我想知道为什么以及如何通过它。
> value = "0.0"
> print value.isdigit():
>>> False
我的代码是:
if "." in value and value.isdigit()
print "ok"
答案 0 :(得分:5)
str.isdigit()
只有在字符串中的所有字符都是 digits 时才会返回true。 .
是标点符号,而不是数字。
来自Python 3 str.isdigit()
documentation:
形式上,数字是具有属性值Numeric_Type = Digit或Numeric_Type = Decimal
的字符
(对于Python 2,对于str
个对象,仅考虑ASCII数字(0
到9
),但对于unicode
个对象,应用相同的定义)。
见official Numeric Property definitions specification;有708 Unicode codepoints符合该说明。
将此简化为一般的unicode类别,Unicode中的数字类型的类别以N
开头,但.
没有:
>>> import unicodedata
>>> unicodedata.category(u'.')
'Po'
P
代表标点符号,o
代表其他。
反之亦然,只包含数字的字符串并不总是可以转换为浮点数或数字:
>>> unicodedata.name(u'\u2080')
'SUBSCRIPT ZERO'
>>> unicodedata.category(u'\u2080')
'No'
>>> unicodedata.digit(u'\u2080')
0
>>> u'\u2080'.isdigit()
True
>>> float(u'\u2080')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'decimal' codec can't encode character u'\u2080' in position 0: invalid decimal Unicode string
因此,就float()
而言,下标零不是0,但 是一个数字。
如果要测试字符串是否为有效的浮点数,请使用float
并捕获ValueError
:
def is_float(string):
try:
float(string)
return True
except ValueError:
return False