2009-05-20 63 views
4

我想評估一個我的界面的文本框中的字符串是否是一個數字(即不是文本或其他)。在Python中,有一個名爲isdigit()的方法,如果字符串只包含數字(不包含負號或小數點),將返回True。有沒有另一種方法可以評估我的字符串是否是一個有理數(例如:1.25)。isDigit()爲有理數?

示例代碼:

if self.components.txtZoomPos.text.isdigit(): 
     step = int(self.components.txtZoomPos.text) 

回答

5

1.25是通常用於reals的符號,rational numbers的符號更少。轉換失敗時,Python的float將引發ValueError。因此:

def isReal(txt): 
    try: 
     float(txt) 
     return True 
    except ValueError: 
     return False 
+0

不,這兩個,如果你去標準的數學名稱。實數行由有理數和無理數組成,有理數行是整數和可以用'a/b'表示的數字,其中a和b是整數。 – workmad3 2009-05-20 16:30:05

0

INT()或浮動()拋出ValueError異常如果字面無效

0

float()拋出一個ValueError如果轉換失敗。所以嘗試將你的字符串轉換爲浮點數,然後捕獲ValueError

1

try/catch是在Python非常便宜,並且試圖從一個字符串,不是一個數量構造float引發了一個異常:

>>> float('1.45') 
1.45 
>>> float('foo') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: invalid literal for float(): foo 

你可以做類似:

try: 
    # validate it's a float 
    value = float(self.components.txtZoomPos.text) 
except ValueError, ve: 
    pass # your error handling goes here 
1

現有的答案是正確的,更多的pythonic方式通常是try...except(即EAFP) 。

但是,如果您確實想要進行驗證,則可以在使用isdigit()之前刪除精確的一位小數點。

>>> "124".replace(".", "", 1).isdigit() 
True 
>>> "12.4".replace(".", "", 1).isdigit() 
True 
>>> "12..4".replace(".", "", 1).isdigit() 
False 
>>> "192.168.1.1".replace(".", "", 1).isdigit() 
False 

請注意,這並不是要將浮點數與整數相區別。如果你真的需要它,你可以添加該檢查。