2009-05-20 35 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 

请注意,这并不是要将浮点数与整数相区别。如果你真的需要它,你可以添加该检查。

相关问题