我想檢查一下,如果我的值是一個點或逗號的浮點數,但isdigit()返回一個點的假。我想知道爲什麼以及如何通過它。爲什麼isdigit()在float上返回false?
> value = "0.0"
> print value.isdigit():
>>> False
我的代碼是:
if "." in value and value.isdigit()
print "ok"
我想檢查一下,如果我的值是一個點或逗號的浮點數,但isdigit()返回一個點的假。我想知道爲什麼以及如何通過它。爲什麼isdigit()在float上返回false?
> value = "0.0"
> print value.isdigit():
>>> False
我的代碼是:
if "." in value and value.isdigit()
print "ok"
str.isdigit()
如果字符串中的所有字符都數字只會返回true。 .
是標點符號,而不是數字。
從Python 3 str.isdigit()
documentation:
形式上,一個數字是具有屬性值Numeric_Type =數字或字符Numeric_Type =十進制
(對於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
所以標零是不是真的0至於float()
而言,但它是的一個數字。
如果你想測試一個字符串是否是一個有效的浮點數,使用float
,趕上ValueError
:
def is_float(string):
try:
float(string)
return True
except ValueError:
return False
是的,始終使用異常名稱來捕獲except塊中的相應異常。 +1 –
因爲'.'是不是一個數字。對於只包含**數字的字符串,'isdigit()'只返回true。 –
這在任何情況下都是不可能的,因爲一件事不能與另一件事情相提並論。 –
但是「0.0」是一個浮點數,所以對我來說它也是一個數字或者是不同的? –