2017-04-26 100 views
-5

我想檢查一下,如果我的值是一個點或逗號的浮點數,但isdigit()返回一個點的假。我想知道爲什麼以及如何通過它。爲什麼isdigit()在float上返回false?

> value = "0.0" 
> print value.isdigit(): 
>>> False 

我的代碼是:

if "." in value and value.isdigit() 
    print "ok" 
+7

因爲'.'是不是一個數字。對於只包含**數字的字符串,'isdigit()'只返回true。 –

+0

這在任何情況下都是不可能的,因爲一件事不能與另一件事情相提並論。 –

+0

但是「0.0」是一個浮點數,所以對我來說它也是一個數字或者是不同的? –

回答

4

str.isdigit()如果字符串中的所有字符都數字只會返回true。 .是標點符號,而不是數字。

從Python 3 str.isdigit() documentation

形式上,一個數字是具有屬性值Numeric_Type =數字或字符Numeric_Type =十進制

(對於Python 2,用於str對象只考慮ASCII數字(09),但對於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 
+0

是的,始終使用異常名稱來捕獲except塊中的相應異常。 +1 –

相關問題