我想评估一个我的界面的文本框中的字符串是否是一个数字(即不是文本或其他)。在Python中,有一个名为isdigit()的方法,如果字符串只包含数字(不包含负号或小数点),将返回True。有没有另一种方法可以评估我的字符串是否是一个有理数(例如:1.25)。isDigit()为有理数?
示例代码:
if self.components.txtZoomPos.text.isdigit():
step = int(self.components.txtZoomPos.text)
我想评估一个我的界面的文本框中的字符串是否是一个数字(即不是文本或其他)。在Python中,有一个名为isdigit()的方法,如果字符串只包含数字(不包含负号或小数点),将返回True。有没有另一种方法可以评估我的字符串是否是一个有理数(例如:1.25)。isDigit()为有理数?
示例代码:
if self.components.txtZoomPos.text.isdigit():
step = int(self.components.txtZoomPos.text)
1.25是通常用于reals的符号,rational numbers的符号更少。转换失败时,Python的float将引发ValueError。因此:
def isReal(txt):
try:
float(txt)
return True
except ValueError:
return False
INT()或浮动()抛出ValueError异常如果字面无效
float()
抛出一个ValueError
如果转换失败。所以尝试将你的字符串转换为浮点数,然后捕获ValueError
。
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
现有的答案是正确的,更多的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
请注意,这并不是要将浮点数与整数相区别。如果你真的需要它,你可以添加该检查。
不,这两个,如果你去标准的数学名称。实数行由有理数和无理数组成,有理数行是整数和可以用'a/b'表示的数字,其中a和b是整数。 – workmad3 2009-05-20 16:30:05