为什么测试整数时此测试不返回False

时间:2019-02-15 14:18:33

标签: python testing floating-point

期望使它返回False,因为字符串包含整数

def is_float(s):
    try:
        float(s)
        return True
    except ValueError:
        return False

list1 =[['a','4'],['20.1','4'],['100','4'],['102','10'],['31.3','10'],['c','10'],['113','12'],['s','12'],['32.9','12']]
print(is_float(list1[6][0]))

当值为113时返回true。由于数字是整数,我期望为False吗?

4 个答案:

答案 0 :(得分:1)

发生的事情是python将您的字符串“ 113”隐式连接到一个float上,这不会产生错误,因此会破坏is_float方法。

您应该使用的是isinstace()方法,该方法将允许您通过运行isinstance(variable, type)进行测试并返回布尔值

这是实现它的方法:

def is_float(input):
    if isinstance(input, float):
        return True
    else:
        return False

答案 1 :(得分:1)

float()不检查变量是否为float类型,它返回以float形式传递的任何整数(或字符串)。因此,您的函数将始终返回true。

答案 2 :(得分:1)

您可以使用isdigit()检查变量是否为数字。

isinstance(float(s), float)一起将str转换为float,然后检查它是否为float

def is_float(s):

    try:
        print(s)
        if s.isdigit():
            return "It is an Integer.", False
        if isinstance(float(s), float):
                return "It is a Float.", False
    except ValueError:
        return "Not an Integer or Float.", True

list1 =[['a','4'],['20.1','4'],['100','4'],['102','10'],['31.3','10'],['c','10'],['113','12'],['s','12'],['32.9','12']]
print(is_float(list1[0][0]))   # a
print(is_float(list1[6][0]))   # 113
print(is_float(list1[8][0]))   # 32.9

输出:

a
('Not an Integer or Float.', True)
113
('It is an Integer.', False)
32.9
('It is a Float.', False)

答案 3 :(得分:0)

正如其他人所解释的,'113'可以转换为float并得到113.0,我想补充一点,在这种情况下,最好使用try-except-else而不是{ {1}},即

try-except

应该理解为尝试转换为浮点数,如果出现def is_float(s): try: float(s) except ValueError: return False else: return True 则返回ValueError,否则返回False。它将产生与原始实现相同的结果,但是请注意,它更具可读性,因为将True放在return True块中可能表明您在排除try语句中的错误。