isDigit()是否有理数?

时间:2009-05-20 16:21:23

标签: python string

我正在尝试评估我的界面的一个文本框中的字符串是否为数字(即不是文本或其他任何内容)。在Python中,有一个名为isdigit()的方法,如果字符串只包含数字(没有负号或小数点),则返回True。如果我的字符串是一个有理数字(例如:1.25),还有另一种方法可以评估。

示例代码:

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

5 个答案:

答案 0 :(得分:5)

1.25是reals常用的符号,rational numbers则较少。当转换失败时,Python的float会引发ValueError。因此:

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

答案 1 :(得分:1)

现有的答案是正确的,因为Pythonic的方式通常是try...except(即EAFP)。

但是,如果您确实想要进行验证,则可以在使用isdigit()之前删除正好1个小数点。

>>> "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

请注意,这并不会将浮点数视为与整数不同。如果你真的需要它,你可以添加那个检查。

答案 2 :(得分: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

答案 3 :(得分:0)

如果文字无效,

int()或float()会抛出ValueError

答案 4 :(得分:0)

如果转换失败,

float()会抛出ValueError。因此,尝试将您的字符串转换为float,并捕获ValueError