2013-02-19 121 views
3

我想要做的是驗證一個字符串是否是數字 - 一個浮點數 - 但我還沒有找到一個字符串屬性來做到這一點。也許沒有一個。我有一個問題與此代碼:如何驗證字符串是否是有效的浮點數?

N = raw_input("Ingresa Nanometros:"); 
if ((N != "") and (N.isdigit() or N.isdecimal())): 
    N = float(N); 
    print "%f" % N; 

正如你所看到的,我需要的是隻取數字,十進制或浮動。 N.isdecimal()不能解決我心中的問題。

+4

Python的口頭禪是*「請求原諒,而不是許可。」 * - 嘗試它,捕捉到的異常,如果它出錯。 – 2013-02-19 02:11:38

+1

如果你想知道你的代碼爲什麼不起作用:如果'N'中的每個字符都是數字,則'N.isdigit()'爲真。對於'3.14'來說不是這樣。你問:「每個字符都是數字,還是每個字符都是小數?」當你想要問「每個字符是一個數字還是一個小數」時,它將被拼寫爲'all(ch.isdigit()或ch.isdecimal()for ch in N)'。當然,這對於例如'-3.14'或其他完全有效的'float'來說仍然不起作用。這是「容易要求寬恕而不是權限」的許多原因之一,「這是做到這一點的一種方式」 - 但它仍然值得理解「isdigit」。 – abarnert 2013-02-19 02:29:48

回答

10
try: 
    N = float(N) 
except ValueError: 
    pass 
except TypeError: 
    pass 

這將嘗試N轉換爲float。但是,如果它不可能(因爲它不是一個數字),它將會pass(什麼都不做)。我建議你閱讀try and except blocks

你也可以這樣做:

try: 
    N = float(N) 
except (ValueError, TypeError): 
    pass 
+1

如果'N'是'None',那麼你會得到'TypeError',你的代碼將會爆炸。使用'float(N或'')' – 2013-02-19 02:15:19

+0

@YevgenYampolskiy啊,那是真的。我加入'除了TypeError'以避免這種情況。 – 2013-02-19 02:18:15

+3

'除了(ValueError,TypeError)as e:pass'至少 – 2013-02-19 02:30:14

相關問題